python NumPy 1

一、定义

1、概念

         python 的第三方扩展库,用于计算数组。

2、与列表(list)区别

        在 numpy 的数组中,所有元素都必须为相同数据类型(都是整形或都是浮点型)。

        同有切片和索引,在格式上有差异

        在使用前需要导入 numpy包(import numpy as np)--as 是取别名,后面使用numpy可用np代替。

二、ndarray

        NumPy 定义了一个 n 维数组对象,简称 ndarray 对象。

1、array

        创建数组,基本格式为  numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0);

其中 object是一个序列(一般为列表形式)

        dtype = 来指定生成数组的元素数据类型(,copy = 表示数组能否被复制(默认值为True)

        order = 表示选择什么排列方式创建数组(A-默认、C-行、F-列)

        ndmin = 表示选择创建数组的维度

除 object 必须提供,其他都可以默认

arr =numpy.array([1,2,3,4])

print(arr)

#表示其他参数全给默认值,创建一个一维(一行四列)数组 [1 2 3 4]

2、ndim

        查看数组的维度

arr =numpy.array([1,2,3,4])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr.ndim) # 1
print(arr1.ndim) # 2

3、reshape

        将数组变化维度(个数保持不变),格式为 原数组名称.reshape((行,列),默认参数);在无法确定行列值情况下,可以将其中一个 用 -1 替代;默认参数为 order  排序规则。

arr =numpy.array([1,2,3,4,3,4,5,6])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr1)
arr2 = arr.reshape((2,4))
print(arr2)
arr2 = arr.reshape((2,4))
print(arr2)
arr3 = arr.reshape((2,-1))
print(arr3)

#将一维数组 arr转化成 二维数组 arr1的形式

#arr3和arr2一样

三、数组属性

1、shape

        shape (无参数括号),作用为返回元组,元组个数为该数组在维度上的个数

 arr =numpy.array([1,2,3,4,3,4,5,6])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr.shape) #(8,)
print(arr1.shape) #(2, 4)

2、itemsize

        无参数,返回数组每个元素的大小(以字节为单位(配合 dtype )。

arr =numpy.array([1,2,3,4,3,4,5,6],dtype = numpy.int16)
arr1 =numpy.array([1,2,3,4,3,4,5,6],dtype = numpy.float16)
print(arr.itemsize) #  2
print(arr1.itemsize) # 2

3、flags

        无参数,返回数组的内存(C_CONTIGUOUS  行排列;F_CONTIGUOUS 列排列 ;OWNDATA  True表示数据为自己拥有;WRITEABLE  True表示数据可写,False 表述只读;ALIGNED True 表示数据对齐;UPDATEIFCOPY、WRITEBACKIFCOPY   True表示通过copy创建的,回写到原始数组)

 arr =numpy.array([1,2,3,4,3,4,5,6])
print(arr.flags)
# C_CONTIGUOUS: True
# F_CONTIGUOUS: True
# OWNDATA: True
# WRITEABLE: True
# ALIGNED: True
# WRITEBACKIFCOPY: False

四、除array外的创建方法

1、empty

        创建指定形状和指定数据类型(可省略,默认为小数)的数组(元素随机)。格式为 numpy.empty(shape, dtype = float, order = 'C')

arr1 = numpy.empty((3,2))
print(arr1) 

# [[ 5.03506487e+175  1.75631032e-152]
#  [-4.51787738e+198  4.04872553e-309]
#  [ 4.93854310e+180  3.69028917e+180]]

2、zeros 和 ones

         作用同empty,创建的元素全是0 和1:

arr1 = numpy.zeros((3,2))
arr2 = numpy.ones((3,2))
print(arr1)
# [[0. 0.]
#  [0. 0.]
#  [0. 0.]]
print(arr2)
# [[1. 1.]
#  [1. 1.]
#  [1. 1.]]

 3、arange

        等python普通的生成一个序列作用,在numpy中为生成数组,格式:numpy.arange(start, stop, step, dtype),默认不包含stop 。

arr1 = numpy.arange(0,10,1)
print(arr1) # [0 1 2 3 4 5 6 7 8 9]
arr2 = numpy.arange(10,0,-1)
print(arr2) # [10  9  8  7  6  5  4  3  2  1]
arr3 = numpy.arange(0,10,2)
print(arr3) # [0 2 4 6 8]]

4、linspace

        在指定区间(默认两个点都在),均匀将长度分为 num 份数。格式为:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start,stop :区间的起点和终点

num :将区间均匀分割份数

endpoint:默认 True  表示包含终点

retstep :默认 False 表示不返回步长

 计算公式:如果 endpoint =False :(stop-start)/num 
                   如果 endpoint=True: (stop-start)/(num-1)

 arr1 = numpy.linspace(0,10,num=5)
print(arr1) # [ 0.   2.5  5.   7.5 10. ]
arr1 = numpy.linspace(0,10,num=5,endpoint=False)
print(arr1) # [0. 2. 4. 6. 8.]
arr1 = numpy.linspace(0,10,num=5,retstep=True)
print(arr1) 
# (array([ 0. ,  2.5,  5. ,  7.5, 10. ]), np.float64(2.5))

五、切片

1、普通切片

        和列表切片操作一样,使用[start:stop:step] ,多维数组则用[start:stop:step,start:stop:step] 的形式。

一维数组:切片即使行又是列,根据数组定义

arr = numpy.array([1,2,3,4,5])
print(arr)
print(arr[1])  # 第二列元素  2
print(arr[1:])  # 第二列元素到最后列的所有元素  [2 3 4 5]
print(arr[1:4:2])  # 第2列到第五列的数据,按照步长为2跳列获取  [2 4]

二维数组:第一个 start:stop:step 为行切片,第二个为 列切片

arr = numpy.array([[1,2,3,4,5],[11,12,13,14,15]])
print(arr)
print(arr[1])  # 第二行所有元素  [11 12 13 14 15]
print(arr[1,...])  # ... 等同这个取所有
print(arr[1,1])  # 第二行第二列的元素  12
print(arr[1:4:2,1:4:2])  #行列都按照从第二开始到第五结束,步长为2 [[12 14]]

三维数组:根据 start:stop:step,start:stop:step,start:stop:step 的方式切割

arr = numpy.array([[[1,2,3,4],[5,6,7,8]],[[11,12,13,14],[15,16,17,18]]])
print(arr)
print(arr[1,1])  # 第二行第二列的所有元素  [15 16 17 18]
print(arr[1,1,1])  # 第二行第二列的第二位元素  16

 2、slice

        格式:slice(start,stop,step) 

一维数组:

arr = numpy.array([1,2,3,4,5])
arr1 =arr[slice(0,len(arr),2)]
print(arr1) # [1 3 5]

多维数组还是用第一个方法方便

 六、高级索引

 1、整数数组索引

        使用一个数组来访问另一个数组的元素(通过该元素的行列值确定);

        格式:数组变量名称[[行标1,行标2],[列标1,列标2]] --索引位置便是(行标1,列标1),(行标2,列标2)

arr = numpy.array([[1,2,3,4],[5,6,7,8]])
arr1 = arr[[0,1,1],[3,1,2]]
print(arr1) # [4 6 7] (0,3)\(1,2)\(1,2)

 高维度数组索引在原二维索引基础上继续添加索引标识  [[行标1,行标2],[列标1,列标2],[深层1,深层2]] --(行标1,列标1,深层1),(行标2,列标2,深层2)

 arr = numpy.array([[[1,2,3,4],[5,6,7,8]],[[11,12,13,14],[15,16,17,18]]])
arr1 = arr[[0,1,1],[1,1,1]]
print(arr1)
# [[ 5  6  7  8]
#  [15 16 17 18]
#  [15 16 17 18]]
arr2=arr[[0,1,1],[1,1,1],[0,2,1]]
print(arr2) # [ 5 17 16]

2、布尔索引

         通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组(不用处理原数组的维度);直接返回的是原数组位置的值变为Ture 或者 False;在原数组再次调用下,得带最终一维数组。

一维数组

arr = numpy.array([1,2,3,4,5])
arr1 = arr>3
print(arr1) # [False False False  True  True]
arr2 = arr[arr>3]  #原数组调用结果
print(arr2) # [4 5]

二维数组及以上

arr = numpy.array([[1,2,3,4],[5,6,7,8]])
arr1 = arr>3
print(arr1)
# [[False False False  True]
#  [ True  True  True  True]]
arr2 = arr[arr>3] #原数组调用结果
print(arr2) #[4 5 6 7 8]

七、广播

        对不同形状(shape)的数组进行数值计算的方式,体现在相应位置的元素计算。

维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。

长度匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。

不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。

数组加标量:元素分别加上标量(高维度也是)

arr = numpy.array([1,2,3,4,5])
arr1 = arr+2
print(arr1) # [3 4 5 6 7]

一维数组加一维数组:元素对应

 arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([1,2,3,4])
arr2 = arr+arr1
print(arr2)

# operands could not be broadcast together with shapes (5,) (4,) 

 arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([1,2,3,4,5])
arr2 = arr+arr1
print(arr2)# [ 2 4 6 8 10]

 一维数组加二维数组:列数或行数对应,相当于将高维度拆分成多个相同的低维度相加,最后在组成新的高维度数组

arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([[1,2,3,4,5],[11,12,13,14,15]])
arr2 = arr+arr1
print(arr2)
# [[ 2  4  6  8 10]
#  [12 14 16 18 20]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python——类

问:小编为什么突然开始发python?难道C语言你不行了? 废话少说,让我们进入python中的类的学习!! (一)基本知识 (1)掌握类的概念 1、类的定义: 即…

python安装transformer教程

本章教程,记录在Windows中如何使用python安装transformer。 一、安装依赖 pip install transformers推荐使用国内镜像源,速度会快很多。 二、测试代码 from transformers import pipeline# 加载一个文本生成模型 text_generator = pipe

LCWLAN设备的实际使用案例

我们的LCWLAN设备在实际使用中以裸板的形式放在客户的智能总线控制器中,客户的 智能总线刀片灯,柔性灯货架,柔性感应钢网柜以及智能电子料架等设备都是接到总线控制 器中,然后总控制器通过CAN总线和我们的LCWLAN设备连接&#xff…

Linux DEADLINE调度算法详解

介绍 在实时系统中,调度算法的选择对于任务的及时执行至关重要。为了满足实时性需求,Linux内核引入了不同的调度算法,其中 DEADLINE 调度算法是为硬实时任务而设计的。DEADLINE 调度算法的目标是在多任务的情况下确保任务在其指定的最后期限…

Cpp::STL—容器适配器Stack和Queue的讲解和模拟实现(15)

文章目录 前言一、适配器模式概念分类 二、Stack核心作用代码实现 三、Queue核心作用代码实现 四、deque双端队列貌似兼收并蓄?实则也难以兼得~ 总结 前言 适配器也是STL六大组件之一,请跟我一起领悟它的智慧!   正文开始! 一、…

如何实现简单的 WinCC 项目分屏?

说明: 本文主要介绍了在不使用分屏器的情况下,通过 WinCC 项目中的设置,实现简单的分屏操作。两台显示器分别显示不同的 WinCC 画面,独自操作,互不影响。 试验环境 : 本文试验时所用硬件及软件环境…

案例分享—国外优秀UI设计作品赏析

国外UI界面设计之所以出色,首要原因在于其注重用户体验。设计师们深入洞察用户需求,通过细致的用户调研和数据分析,确保界面布局、色彩搭配及交互方式都能贴合用户习惯,从而提供流畅、直观的操作体验,增强用户满意度和…

【MySQL】数据库基础、库的操作、表的操作、数据类型

目录 1. 数据库基础1.1 MySQL是什么1.2 使用案例1.3 服务器,数据库,表关系 2. 库的操作2.1 字符集和校验规则2.1.1 查看系统默认字符集以及校验规则2.1.2 查看数据库的字符集和校验规则2.1.3 修改数据库的字符集和校验规则 2.2 库的操作2.2.1 创建数据库…

c++算法第4天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 第一题 题目链接 牛牛的快递_牛客题霸_牛客网 题目解析 <1kg -------> 20元 大于1kg&#xff1a;超出部分每千克1元 加急 5元 代码原理 代码编写 #include …

QT 实现自定义水波进度条

1.界面实现效果 以下是具体的项目需要用到的效果展示。 2.简介 原理:随着进度的改变,在我们的绘制图像void paintEvent(QPaintEvent *) override;事件中绘制图形。 使用QPainter来绘制正弦波,通过定时器,不断的更新我们绘制的图形,动态改变正弦波的参数来创建动画效果…

【从零开始的LeetCode-算法】3099. 哈沙德数

如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&#xff09;。给你一个整数 x 。如果 x 是 哈沙德数 &#xff0c;则返回 x 各个数位上的数字之和&#xff0c;否则&#xff0c;返回 -1 。 示例 1&#xff1a; 输入&am…

提高阅读效率:三种读书笔记方法的实践

你是否曾经感到&#xff0c;尽管阅读了大量书籍&#xff0c;却很少有几本能够留下持久的印象&#xff0c;甚至书中的人物也逐渐从记忆中消失。实际上&#xff0c;这种阅读方式可能并没有太大的价值。要想真正从阅读中获益&#xff0c;培养良好的阅读习惯至关重要&#xff0c;而…

IDEA下lombok安装及找不到get,set的问题的解决方法

在IDEA中使用Lombok,但是在编译时&#xff0c;提示找不到set()和get()方法&#xff0c;明明在javabean中使用了Data注解&#xff0c;但是编译器就是找不到。 Idea下安装Lombok(需要二步) 第一步&#xff1a; pom.xml中加入lombok依赖包 1 2 3 4 5 6 7 <!-- https://mvnre…

Linux的开发工具gcc Makefile gdb的学习

一&#xff1a;gcc/g 1. 1 背景知识 1. 预处理&#xff08;进行宏替换) 预处理 ( 进行宏替换 ) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结…

如何在算家云搭建PhotoMaker(图像生成)

一、PhotoMaker简介 PhotoMaker是一种高效、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义的逼真人类照片。相当于把一张人类照片的特征提取出来&#xff0c;然后生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内快速…

远控代码的重构-远控网络编程的设计上

套路化代码 但是我们这是一个MFC工程,我们需要考虑不是所有操作都需要到main函数里面实现,有些操作可以在main函数之前完成,有些可以在main函数返回以后完成,静态全局变量满足这个需求,我们需要添加一个自己的类 编辑器细节1 添加类和添加类向导的区别,一个是添加自己的类,一…

ESP8266 模块介绍—AT指令学习 笔记

零、简介 感谢百文网韦东山 老师对ESP8266模块的讲解 笔记在CSDN也有文章备份 大家可以在我的gitee仓库 中下载笔记源文件、ESP8266资料等 笔记源文件可以在Notion中导入 一、ESP8266-01S模块详细介绍 1. 名字的由来 ESP8266 是方形的主控芯片旁边的长方形是一个Flash-0…

000010 - Mapreduce框架原理

Mapreduce框架原理 1. InputFormat 数据输入1.1 切片与 MapTask 并行度决定机制1.2 Job 提交流程源码和切片源码详解1.2.1 Job 提交流程源码详解1.2.2 FileInputFormat 切片源码解析&#xff08;input.getSplits(job)&#xff09; 1.3 FileInputFormat 切片机制1.3.1 切片机制1…

基于Springboot个性化图书推荐系统的设计与实现

基于Springboot个性化图书推荐系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;…

整理—计算机网络

目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些&#xff1f; GET和POST的使用场景&#xff0c;有哪些区别&#xff1f; HTTP的长连接 HTTP默认的端口是什么&#xff1f; HTTP1.1怎…