import numpy as np
ndarry
同种类型元素组成的多维数组
a = np.array([[1, 2, 3],[4, 5, 6]], dtype = float)
属性
- ndim:维度
- shape:数组形状
- reshape:改变形状
- dtype:元素类型
- size:尺度,代表元素个数
a.ndim #2
a.shape #(2, 3)
a.reshape(3, -1) #(3, 2) -1代表未知,根据其他维度来计算这一维的数值
a.dtype #float64
a.size #6
创建方式
- array:将普通序列转化为ndarray
- zeros:创建指定长度或形状的全零数组
- ones:创建指定长度或形状的全1数组
- empty:创建一个未初始化的数组
np.zeros((3, 4)) #这里(3, 4)为自己想创建的数组类型
np.ones((3, 6))
np.empty((3, 6))
- arange:(开始值, 终值, 步长)和python的
range
相同,不包括最终值 - linspace:(开始值, 终值, 元素个数),包含最终值
- logspace:(n, m, 元素个数),将从10n开始到10m结束,为等比数列
np.arange(5) #array([0, 1, 2, 3, 4])
np.arange(0, 5, 1) #array([0, 1, 2, 3, 4])
np.linspace(0, 10, 5) #array([0, 2.5, 5, 7.5, 10])
np.logspace(0, 2, 5) #array([ 1. , 4.64158883, 21.5443469 , 100. ])
- random:产生随机数
np.random.random((2, 4)) #数组维度为(2, 4)
数据类型
- astype:转换数组类型
example = a.astype (int)
常见类型:
- in8:-128 ~ 127,1个字节
- in16:-32768 ~ 32767,2个字节
- float16:5位指数,10位小数
- float32:8位指数,23位小数
- float64:11位指数,52位小数
操作
运算
采用广播机制,对于数组可以实现批量计算
- 标量运算较为简单,
+-*/
同理
b = 2 * a #array([[2, 4, 6], [8, 10, 12]])
- 数组间元素运算(对应元素运算):
+-*/
要求数组形状相同
a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 2], [3, 4]])
c = a+b #array([[2, 4], [6, 8]])
- 矩阵外积:矩阵乘积
c = np.dot(a, b) #array([[ 7, 10], [15, 22]])
附:矩阵内积为2+4+6+8
布尔索引
索引有很多花样,这里只介绍最常用的两种
该索引方式适用于数值和字符串
example = np.random.random((2, 2))
#array([[0.88270165, 0.79228441],[0.24445323, 0.33982179]])
example>0.5
#array([[ True, True], [False, False]])
example2 = example[example>0.5]
#array([0.88270165, 0.79228441])
转置
example2 = example.transpose()
example2 = example.T
# array([[0.88270165, 0.24445323],[0.79228441, 0.33982179]])
通用函数
- abs,fabs:计算整数、浮点数或复数的绝对值,fabs对非复数更快
- sqrt:计算各元素的平方根
- square:计算各元素的平方
- exp:计算各元素的指数e的x次方
- maximum、fmax:元素级别的最大值,fmax会忽略NaN
- minimum、fmin:元素级别的最小值,fmin会忽略NaN
- pow:对第一个数组中的元素A,根据第二个数组中的相应元素B, 计算A的B次方
- isnan:返回一个表示“哪些值是NaN(不是一个数字)”的布尔类型数组
- mod:元素级的求模(除法的余数)
最大值,最小值,均值
- max():最大值
- min():最小值
- std():均值
a = np.array([[1, 2, 3],[4, 5, 6]])
a.max() #6
a.min() #1
a.std() #1.707825127659933
a.min(axis=0) #第0维即按列求最小值
#array([1, 2, 3])
where函数
np.where(条件, x, y)
=x[x if 条件 else y]
example = np.array([[1, 2, np.NaN], [4, np.NaN, 6]])
example2 = np.where(np.isnan(example), 0, example)
# array([[1., 2., 0.], [4., 0., 6.]])
文件读写
二进制文件
a = np.array([[1, 2, 3],[4, 5, 6]])
np.save('data', a)
data = np.load('data.npy')
文本文件
主要以csv文件形式
np.savetxt('data.csv', a, delimiter=',')
data = np.loadtxt('data.csv', delimiter=',')
data = np.genfromtxt('data.csv', delimiter=',')
#会读取标题,如data['y']