文章目录
一、NumPy是什么?
这是一个正式的定义,NumPy是一个开源的Python科学计算基础库,包括:
{
一
个
强
大
的
N
维
数
组
对
象
n
d
a
r
r
a
y
线
性
代
数
、
傅
里
叶
变
换
、
随
机
数
生
成
等
功
能
整
合
C
/
C
+
+
/
F
o
r
t
r
a
n
代
码
的
工
具
\begin{cases} 一个强大的N维数组对象ndarray\\ 线性代数、傅里叶变换、随机数生成等功能\\ 整合C/C++/Fortran代码的工具 \end{cases}
⎩⎪⎨⎪⎧一个强大的N维数组对象ndarray线性代数、傅里叶变换、随机数生成等功能整合C/C++/Fortran代码的工具
其本质就是多了可以表示向量、矩阵的数据类型
引用NumPy:
import numpy as np
二、为什么会有NumPy,ndarray数组对象
(以后ndarray数组对象简称ndarray数组、ndarray对象)
理解ndarray数组
类似于传统语言(如C)的数组但更强大
1、比较ndarray数组与列表结构
Python列表含有一个指针指向一块连续的指针内存空间,里面的每个指针再指向内存中每个独立的Python对象。列表的优势在于灵活:因为每个元素都是完整的Python的类型对象结构,包含了数据和类型信息,因此列表可以存储任何类型的数据。
ndarray数组一个指针指向一块内存空间,内存空间中仅仅包含一个指针指向一块连续的内存空间。
其实Python中的array
提供了数组的高效存储,但更常用的是NumPy包中的ndarray
对象。因为NumPy更加提供了数组的高效运算
。
2、ndarray数组使数据更像向量和矩阵
这里的向量和矩阵就是指的数学上的意思,使我们对数组的操作与数学上的类似。
例如:
使用列表
A = [1,2,3,4]
B = [1,2,3,4]
C = []
for i in range(len(A)):
C.append(A[i]+B[i])
使用ndarray数组
import numpy as np
A = np.array([1,2,3,4])
B = np.array([1,2,3,4])
C = A+B
三、ndarray对象属性
n d a r r a y 对 象 结 构 { 实 际 数 据 描 述 这 些 数 据 的 元 数 据 ( d i m 、 t y p e ) ndarray对象结构\begin{cases} 实际数据\\ 描述这些数据的元数据(dim、type)\\ \end{cases} ndarray对象结构{实际数据描述这些数据的元数据(dim、type)
属性 | 功能 |
---|---|
.ndim | 秩/维度数量 |
.shape | 形状(n x m) |
.dtype | 对象中元素类型 |
.size | 对象中元素个数 |
.itemsize | 对象中每个元素大小 |
创建ndarray数组接下来将会讲到
可以看到创建了2x5的数组(矩阵),其中数组维度为2,数据类型为int32,共10个元素,每个占4字节。数据类型太多,感兴趣自行查看。
四、ndarray数组创建
1.从Python中的列表、元组等类型创建
x = np.array(list/tuple,dtype=’float32‘)
第一个参数就直接放Python中的列表或者元组,第二个参数指定以什么数据类型存放。
2.从NumPy中函数创建
shape都是元组类型
方法 | 功能 |
---|---|
np.arange(n) | 类似python中range函数,只是产生ndarray数组 |
np.linspace(start,end) | 根据起始数据等间距地填充数据,形成数组 |
np.ones(shape) | 产生shape形状的数组,数组中的值都为1 |
np.zeros(shape) | 产生shape形状的数组,数组中的值都为0 |
np.full(shape,val) | 产生shape形状的数组,数组中的值都为val |
np.eye(n) | 产生n维单位矩阵(数组) |
np.ones_like(a) | 产生和数组a相同形状的数组,数组中的值都为1 |
np.zeros_like(a) | 产生和数组a相同形状的数组,数组中的值都为0 |
np.full_like(a,val) | 产生和数组a相同形状的数组,数组中的值都为val |
使用随机函数创建 | 解释:初始化条件等就直接使用随机函数创建 |
np.linspace()方法中的endpoint表示是否包含结束数值。
3.从文件中创建(文件存取)
根据我的情况看使用ndarray来获取文件数据并不常用,所以就略写
①CSV文件
此方法常对txt文件进行存取
np.savetxt(fname,array,fmt='%.18e',delimiter=None)
'''
fname:存入文件名;array:要存储的数组;
fmt:写入文件格式;delimiter:分隔符,存入文件时数据用分隔符隔开
'''
np.loadtxt(fname,dtype=np.float32,delimiter=None,unpack=False)
'''
unpack若为True,读入属性将分别写入不同变量
'''
txt文件内容如下:
打印变量y:
局限性:只能存取一维、二维数组。
五、ndarray数组变换
1.维度变换
顾名思义,就是对数组的维度进行变换
方法 | 功能 |
---|---|
x.reshape(shape) | 将数组形状改变为shape形状,原数组不变 |
x.resize(shape) | 功能如上,原数组改变 |
x.swapaxes(ax1,ax2) | 调换ax1维度和ax2维度的数据,原数组不变 |
x.flatten() | 将数组降维为一维,原数组不变 |
2.类型变换
变换数组元素数据类型:
变换数组数据类型:
注意两者都没有改变原数组
六、数组的索引和切片
1.一维数组
类似Python中列表操作
索引 | 切片 |
---|---|
x[index] | x[start : end : span] |
2.多维数组
索引 | 切片 |
---|---|
x[index,index,…] | x[start : end : span,start : end : span,…] |
七、数组的运算
1.与标量之间
与标量计算,标量计算作用于每一个元素(相当于数学的计算)
2.函数运算
太多运算,等我统计了运用次数多的添加进来
总结
Numpy库的出现就是为了让我们对于数组的计算更像我们数学上线性代数的计算,同时也是为了Python性能上的兼顾。