numpy 基础
导入numpy
import numpy as np
版本
np.__version__
np常用方法
np.array([1,2,3,4])#创建一个向量
np.zeros(10)#创建一个长度为10的全0向量
np.zeros((3,5))#创建一个3*5的全0矩阵
np.zeros(shape=(3,5),dtype=int)#创建一个3*5的全0矩阵,类型为int
np.ones()#参数与上面同理
np.full((3,5),100)#创建一个3*5的全100的矩阵
np.full(fill_value=100,shape=(3,5))
np.arange(0,20,2)#创建一个[0,20)步长为2的向量,起始不填为0,步长不填为1
np.linspace(0,20,10)#将[0,20]分10份
np.random.randint(0,10)#[0, 10)之间的随机数
np.random.randint(0, 10, 10)#10个[0, 10)之间的随机数
np.random.randint(0, 10, size=10)#同上
np.random.randint(0, 10, size=(3,5))#3*5的[0, 10)之间的随机数矩阵
np.random.seed(666)#设置随机种子
np.random.random((3,5))#3*5的[0,1)的矩阵
np.random.normal()#正态分布随机数
np.random.normal(0, 1, (3, 5))#均值为0,标准差为1的 3*5的矩阵
np.arange(20).reshape((4,5))#将[0,14)的向量转换为4*5的矩阵
numpy.array 的基本属性
x=np.arange(20)
x.ndim#输出维度 eg:4
x.shape#输出维度信息,eg:(3,5)
x[0]#取第一个元素
x[-1]#取最后一个元素
x[0,0]#取第0行0列的元素
x[2:5]#取第2到5个元素
x[:5]#取0到5个元素
x[5:]#取5到最后一个元素
x[::2]#取第0开始到最后一个,步长为2的元素
x[2::2]#取第2开始到最后一个,步长为2的元素
x[::-1]#取第最后一个开始到第0个,步长为1的元素
x[:2,:3]#取0到2行中的0到3列
x[:2,::2]#取0到2行中,步长为2的所有数据
x[::-1,::-1]#取从最后一行到第一行,最后一列到第一列,步长为一的元素
x[0,:]#取第0行的所有列
x[:,0]#取所有行的第0列
x.copy#获取一份x的副本,不这样的话对获取出来的子矩阵修改后会影响父矩阵
x.reshape(3,-1)#将x重新变为3*n的矩阵,n为自适应
numpy.array 合并
x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
z = np.array([666, 666, 666])
A = np.array([[1, 2, 3],[4, 5, 6]])
B = np.full((2,2), 100)
np.concatenate([x,y])#将x和y合并,结果为array([1, 2, 3, 3, 2, 1])
np.concatenate([A, A])#将A与自身合并
np.concatenate([A, A], axis=1)#将A与自身在第1个维度上合并
np.vstack([A,z])#将A与z进行竖直(在0维度上)合并
np.hstack([A, B])#将A与B进行水平(在1维度上)合并
numpy.array 分割
x = np.arange(10)
A = np.arange(16).reshape((4, 4))
x1, x2, x3 = np.split(x, [3, 7])#把x分割出三份,分别为[0,3),[3,7),[7,10)
A1, A2 = np.split(A, [2])#把A在第0维上分割成[0,2),[2,结束)这2份
A1, A2 = np.split(A, [2], axis=1)#把A在第1维上分割成[0,2),[2,结束)这2份
upper, lower = np.vsplit(A, [2])#把A在第0维上分割成[0,2),[2,结束)这2份
left, right = np.hsplit(A, [2])#把A在第1维上分割成[0,2),[2,结束)这2份
X, y = np.hsplit(A, [-1])#把A在第1维上分割成[0,结束),[结束]这2份
numpy.array 运算
X = np.arange(1, 16).reshape((3, 5))
2*X#每个元素*2
X+1#每个元素+1
X-1
X/2
X//2#每个元素/2,结果四舍五入
X**2#每个元素的平方
X%2#每个元素%2
1/X#每个元素求倒数
np.abs(X)#求绝对值
np.sin(X)#sin
np.cos(X)#cos
np.tan(X)
np.arctan(X)
np.exp(X)#每个元素 以e为底的元素指数方
np.exp2(X)#每个元素 以2为底的元素指数方
np.power(3,X)#每个元素 以3为底数的元素指数方
np.log(X)#每个元素 以e为底的,对数为每个元素
np.log2(X)#每个元素 以2为底的,对数为每个元素
np.log10(X)#每个元素 以10为底的
A = np.arange(4).reshape(2, 2)
B = np.full((2, 2), 10)
A + B#矩阵相加,各个元素对应着相加
A - B#矩阵相减,各个元素对应着相减
A * B#矩阵相乘,各个元素对应着相乘
A.dot(B)#矩阵乘法,常规矩阵相乘计算方式
A.T#矩阵转置
np.tile(v, (2, 1))#v在行向量堆叠2次在列向量堆叠1次
np.linalg.inv(A)#矩阵的逆
np.linalg.pinv(X)#矩阵的伪逆
聚合
L = np.random.random(100)
np.sum(L)#求和
L.sum()#同上
np.min(L)#求最小值
np.max(L)#求最大值
np.sum(X, axis=0)#在第0维求和
np.sum(X,axis=1)#在第1维求和
np.prod(X)#所有元素乘积
np.mean(X)#所有元素的平均数
np.median(X)#所有元素的中位数
np.percentile(big_array, q=50)#50%的元素小于的值
np.var(X)#方差
np.std(X)#标准差
arg运算
x = np.random.normal(0, 1, 1000000)
np.argmin(x)#返回最小值的索引
np.argmax(x)#返回最大值的索引
np.random.shuffle(x)#乱序处理
np.sort(x)#排序
x.sort()#排序
np.sort(X, axis=0)#在第0个维度排序
np.sort(X, axis=1)#在第1个维度排序
np.argsort(x)#排序后的索引
np.partition(x, 3)#快速排序,小于3的在左边大于3的在右边,3在中间,左右的元素不按顺序
np.argpartition(x, 3)#返回快排索引
np.argsort(X, axis=1)#返回排序在第1个维度的索引
np.argpartition(X, 2, axis=1)#返回快速排序以2为标定点在第1个维度的索引
Fancy Indexing
x = np.arange(16)
ind = [3, 5, 7]
x[ind]#通过ind获取元素
ind = np.array([[0, 2], [1, 3]])
x[ind]#ind为矩阵的情况下获取出来是个矩阵且结果为x[ind元素的值]
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row, col]
col = [True, False, True, True]
X[0, col]#True为显示
x<3#返回True或False的矩阵,> >= == != 类似
np.count_nonzero( x <= 3)#返回x<=3的所有True的数量
np.sum(X % 2 == 0, axis=0)#X % 2 == 0会返回一个True 或False的矩阵,计算矩阵在第0维度上所有True的个数
np.any(x == 0)#判断是不是有元素=0
np.all(x > 0)#判断是不是所有元素都>0
np.sum((x > 3) & (x < 10))#两个矩阵,同为True则为True,最后计算True个数
np.sum((x % 2 == 0) | (x > 10))
np.sum(~(x == 0))
x[x < 5]#得到x<5的所有元素
X[X[:,3] % 3 == 0, :]#得到每一行的第3列%3为0的所有列