NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
https://numpy.org/
初始化
import numpy as np
a=np.array([[1,2,6],[2,4,5],[3,9,11],[4,5,10]])
np.arange(10,30,5)
np.empty((2,2)) #分配指定大小的数组,未初始化 ,随机填充值
np.zeros([2,3,4],dtype=np.int32) #将两个3行4列0元素组成的矩阵 组成在一起 好像在绕口令
np.linspace(0,50,5) #0-50之间5等分
np.random.randn(2, 3)
随机数参考:
https://blog.csdn.net/weixin_42029738/article/details/81977492?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
相关属性
a.shape #表示各位维度大小的元组(几维返回几个数)。返回的是一个元组 a的行列 a.shape[0]行数 a.shape[1] 列数
a.ndim #返回的是数组的维度,返回的只有一个数,该数即表示数组的维度。
print(a.dtype) #一个用于说明数组数据类型的对象。返回的是该数组的数据类型 int32、float64是Numpy库自己的一套数据类型。
a.astype('float64') #转换数组的数据类型。
a.size #元素数量
矩阵修改
a[0][0]=99
zero.shape=(3,8) #shape返回值是元组形式
b=a.reshape([3,4]) c=a.reshape([-1,4])
#-1代表的维度的取值需要根据数组的长度和其他维度来共同确认
a.T #矩阵转置 transpose:以维数为基准作坐标轴对换
a.ravel() a.flatten()
#将矩阵变成一维
使用过程中flatten()分配了新的内存,但ravel()返回的是一个数组的视图,原数组和ravel()返回后的数组地址不同
np.sort(a,order ='')
np.argsort() #返回数据的索引数组
矩阵查询
a[:,1] #第2列 [行:列] 行列打印 [行,列] 元素打印
a.sum(axis=1) #axis=1 对行操作 axis=0 对列操作
strs = np.array(['x','y','z','w'])
a[strs=='x'] # x对应的行
a[strs!='y'] a[~(strs=='y')] #不包含y行的其他行
矩阵计算
A=np.array([[1,2],[3,4]])
B=np.array([[2,0],[1,3]])
A+B A*B #对应位置进行操作 + - * / // % ** ==大小相同的数组之间的比较会生成布尔值数组
#大小不同可以兼容——较小的数组会广播到较大数组的大小,以便使它们的形状可兼容
A.dot(B) or np.dot(A,B) #真正的矩阵相乘
X=np.floor(10*np.random.random((2,2)))
Y=np.floor(10*np.random.random((2,2)))
np.vstack((X,Y)) #按行拼接
np.hstack((X,Y)) #按列拼接
np.maximum(X,Y) #选取对应位置最大值
广播规则
- 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
- 输出数组的shape是输入数组shape的各个轴上的最大值
- 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
- 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值
常用函数
np.exp(a) np.sqrt(a) #e^ 开根号
D=np.floor(10*np.random.random((3,4))) #向下取整
np.argsort() #返回的是数组值从小到大的索引值
精度资料 https://blog.csdn.net/tz_zs/article/details/80775256
a.argmax(axis=1) #返回每行最大值索引
a[range(a.shape[0]),e] #根据索引值返回对应值
arr = np.arange(12).reshape((2,2,3))
print('arr:\n',arr)
print('arr.T:\n',arr.T)
print('arr.transpose((1,0,2)):\n',arr.transpose((1,0,2)))
print('arr.transpose((2,1,0)):\n',arr.transpose((2,1,0)))
#numpy.where函数是三元表达式x if condition else y的矢量化版本
x = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
condition = np.array([True, False, True, True, False])
res = np.where(condition, x, y)
# [1.1 2.2 1.3 1.4 2.5]
杂
tile函数 原矩阵横向、纵向地复制
ones_like(),zeros_like():根据指定的形状和type,创建全1、全0数组
slice() 数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。建议用copy
eye(), diag():创建对角矩阵
logspace():同上,但创建等比数列
tile参考:https://www.jianshu.com/p/9519f1984c70