Numpy基础
最后更新时间:
文章总字数:
预计阅读时间:
首先,安装numpy在一个虚拟环境中:cmd打开终端
然后输入
1 |
|
再输入
1 |
|
激活并进入虚拟环境,然后就可以在这里下第三方库了。
再输入
1 |
|
下载numpy。
一.Numpy基础
Python 的第三方扩展包,主要用来计算、处理一维或多维数组
底层主要用 C语言编写,因此它能够高速地执行数值计算
提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上
数组算术计算方面,提供了大量的数学函数
1.1 与列表的区别
NumPy 数组是同质数据类型(homogeneous),Python 列表是异质数据类型(heterogeneous),即列表中的元素可以是不同的类型。
列表提供了基本的列表操作,如添加、删除、切片、排序等
NumPy 数组提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等
二.ndarray对象
一个 n 维数组对象,是一个一系列相同类型元素组成的数组集合,每个元素都占有大小相同的内存。内存常用的布局方式有两种,即按行(C语言)或者按列(Fortran语言)。
2.1 ndarray对象创建
NumPy 的内置函数 array()
可以创建 ndarray 对象。
1 |
|
结果:
1 |
|
| object | 表示一个数组序列 |
| dtype | 可选参数,通过它可以更改数组的数据类型 |
| copy | 可选参数,表示数组能否被复制,默认是 True |
| order | 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认) |
| ndmin | 用于指定数组的维度 |
- object
1 |
|
结果:
1 |
|
可以看到数组与列表的差异还是明显的,其中元素以空格分割,而列表以逗号分割。且传进arrary函数的参数可以是任意可迭代对象。
- dtype
1 |
|
结果:
1 |
|
- ndmin
1 |
|
结果:
1 |
|
尝试查看数组形状:
1 |
|
结果:
1 |
|
2.2 zeros()
创建指定大小的数组,数组元素以 0
来填充。
1 |
|
| shape | 数组形状 |
| dtype | 数据类型 |
| order | ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组 |
1 |
|
结果:
1 |
|
注意:这里的 ‘0.’ 代表的是浮点数, ‘0.’ 即 ‘0.0’
2.3 ones()
创建指定形状的数组,数组元素以 1
来填充,参数与zeros一致。
1 |
|
1 |
|
结果:
1 |
|
2.4 full()
full()用于创建一个填充指定值的数组。
1 |
|
| shape | 数组的形状(如 (2, 3) 表示 2 行 3 列的数组) |
| fill_value | 填充的值 |
| dtype | 数组的数据类型(如 np.float32
) |
| order | 数组的内存布局(如 'C'
表示 C 风格,'F'
表示 Fortran 风格) |
1 |
|
结果:
1 |
|
可以看到这里传一个整数进去那数组内部默认就是整数了,而不是浮点数。
2.5 arrange()
用于创建一个等差数列的数组。它类似于 Python 内置的 range()
函数,但返回的是一个 NumPy 数组。
1 |
|
| start | 起始值,默认为 0 |
| stop | 终止值(不包含) |
| step | 步长,默认为 1 |
| dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型 |
1 |
|
结果:
1 |
|
2.6 linspace()
在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份。
1 |
|
| start | 起始值,默认为 0 |
| stop | 终止值(默认包含) |
| num | 要生成多少个均匀的样本,默认为 50 |
| endpoint | 是否包含终止值,默认为 True |
| retstep | 是否返回步长,如果为 True,则返回一个包含数组和步长的元组,如果为 False,则只返回数组。默认为 False |
| dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型,默认None |
1 |
|
结果:
1 |
|
注意,如果要以0.5为步长的话,应该取(stop-start)的2倍再加1,直接用差值2倍会少取一个
容易出问题的地方如下:
1 |
|
结果:
1 |
|
因此延伸出步长的计算:
step = (stop - start) / (num - 1)
差了(stop - start)这么多数
分成(num - 1)份
三.numpy数据类型
NumPy 提供了比 Python 更加丰富的数据类型
NumPy 中每种数据类型都有一个唯一标识的字符码,int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,’i4’,’i8’ 代替
1 |
|
可以使用数组的 dtype 属性来获取数组中元素的数据类型
可以使用 astype() 方法来转换数组中元素的数据类型
1 |
|
结果:
1 |
|
- 也可以在数组中直接声明数据类型
1 |
|
结果:
1 |
|
在编程中,字节序标记用于指定数据的字节顺序。常见的字节序标记包括:
<
: 小端序,数据的最低有效字节存储在内存的最低地址,而最高有效字节存储在内存的最高地址。>
: 大端序,数据的最高有效字节存储在内存的最低地址,而最低有效字节存储在内存的最高地址。
四.简单数组属性
4.1 shape
通过赋值,可以用来调整数组形状,也可以通过直接访问返回一个元组。
1 |
|
结果:
1 |
|
可以看到,a之前是一个一维数组无所谓行列,但是更改形状后拥有了行列,变成了二维数组,行列都是关于二维数组来讲的。
注意:这里的(3,)
表示数组里有3个元素,没有规定是一行还是一列。
4.2 数组维度 ndmin
ndim 是 NumPy 数组的一个属性,用于返回数组的维度数(即数组的秩)。
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。
1 |
|
结果:
1 |
|
4.3 flags
- C_CONTIGUOUS:
表示数组在内存中是 C 风格连续的(行优先)。
如果为 True,则数组是 C 风格连续的。
- F_CONTIGUOUS:
表示数组在内存中是 Fortran 风格连续的(列优先)。
如果为 True,则数组是 Fortran 风格连续的。
- OWNDATA:
表示数组是否拥有自己的数据(即是否是视图)。
如果为 True,则数组拥有自己的数据;如果为 False,则数组可能是从另一个数组或对象借用数据的。
- WRITEABLE:
表示数组是否可写。
如果为 True,则数组是可写的;如果为 False,则数组是只读的。
- ALIGNED:
表示数组是否对齐。
如果为 True,则数组的数据在内存中是对齐的。
- WRITEBACKIFCOPY:
表示数组是否是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
如果为 True,则数组是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
- UPDATEIFCOPY:
表示数组是否是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
如果为 True,则数组是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
1 |
|
结果:
1 |
|
4.4.item()
.item()
作用是将数组中的单个元素转换为 Python
1 |
|
结果:
1 |
|