Numpy详解
基本类型(array)
array是numpy中最基础的数据结构,最关键的属性是维度和元素类型
a = [1, 2, 3, 4] b = np.array(a) print(type(b)) print(b.shape) print(b.argmax()) 返回array中数值最大数的下标,默认将输入array视作一维,出现相同的最大,返回第一次出现的。 print(b.max()) print(b.mean()) ----------结果---------------- <class 'numpy.ndarray'> (4,) 3 4 2.5
二位数组
np.max:(a, axis=None, out=None, keepdims=False)
求序列的最值
最少接收一个参数
axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
c = [[1, 2], [3, 4]] d = np.array(c) print(d.shape) print(d.size) print(d.max(axis=0)) 最后一个维度上的最大值,array([3, 4]) print(d.max(axis=1)) print(d.mean(axis=0)) print(d.flatten()) 展开一个numpy数组为1维数组,array([1, 2, 3, 4]) print(np.ravel(c)) 可以解析的结构为1维数组,array([1, 2, 3, 4]) ------------结果-------------- (2, 2) 4 [3 4] [2 4] [2. 3.] [1 2 3 4] [1 2 3 4]
函数示例:
print(np.ones((3, 3), dtype=np.float_)) #3x3的浮点型2维数组,并且初始化所有元素值为1 print(np.repeat(3, 4)) # 创建一个一维数组,元素值是把3重复4次,array([3, 3, 3, 3]) g = np.zeros((2, 2, 3), dtype=np.uint8) # 2x2x3的无符号8位整型3维数组,并且初始化所有元素值为0 print(np.zeros(g.shape)) print(g.astype(np.float_)) print(np.arange(10)) print(np.linspace(0, 6, 5)) # 等差数列,0到6之间5个取值,array([ 0., 1.5, 3., 4.5, 6.]) p = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) np.save('p.npy', p) print(np.load('p.npy')) --------------结果------------------ [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] [3 3 3 3] [[[0. 0. 0.] [0. 0. 0.]] [[0. 0. 0.] [0. 0. 0.]]] [[[0. 0. 0.] [0. 0. 0.]] [[0. 0. 0.] [0. 0. 0.]]] [0 1 2 3 4 5 6 7 8 9] [0. 1.5 3. 4.5 6. ] [[1 2 3 4] [5 6 7 8]]
函数示例:
a = np.arange(24).reshape((2, 3, 4)) print(a) print(a[1][1][1]) print(a[:, 2, :]) print(a[..., 1]) print(a[:, 1:, 1:-1]) print(np.split(np.arange(9), 3)) print(np.split(np.arange(9), [2, -3])) c = np.split(np.arange(6), [2, 3]) d = np.split(np.arange(6, 12), [2, 3]) print(c) print(d) -------------------结果-------------------------- [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 17 [[ 8 9 10 11] [20 21 22 23]] [[ 1 5 9] [13 17 21]] [[[ 5 6] [ 9 10]] [[17 18] [21 22]]] [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])] [array([0, 1]), array([2, 3, 4, 5]), array([6, 7, 8])] [array([0, 1]), array([2]), array([3, 4, 5])] [array([6, 7]), array([8]), array([ 9, 10, 11])]
函数示例
array = np.arange(24).reshape(2, 3, 4) print(array.transpose((0, 1, 2))) print("转换后") print(array.transpose((1, 0, 2))) --------------结果----------------------- [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 转换后 [[[ 0 1 2 3] [12 13 14 15]] [[ 4 5 6 7] [16 17 18 19]] [[ 8 9 10 11] [20 21 22 23]]]
transpose究竟做了什么?首先对三维数组的维数(2,3,4)依次编号0,1,2,称之为0-轴,1-轴,2-轴。transpose(1,0,2)表示对换了1-轴和0-轴(本来应该是0,1,2)的位置,2-轴没变。也就是说tranpose会将下标(i,j,k)对应的元素变换到下标(j,i,k)上。例如三维数组元素11的原来下标位置是(0,2,3),通过transpose应该变换到(2,0,3)的位置上,变化后的数组(2,0,3)的位置上确实是11。
# 绝对值,1 a = np.abs(-1) # sin函数,1.0 b = np.sin(np.pi/2) # tanh逆函数,0.50000107157840523 c = np.arctanh(0.462118) # e为底的指数函数,20.085536923187668 d = np.exp(3) # 2的3次方,8 f = np.power(2, 3) # 点积,1*3+2*4=11 g = np.dot([1, 2], [3, 4]) # 开方,5 h = np.sqrt(25) # 求和,10 l = np.sum([1, 2, 3, 4]) # 平均值,5.5 m = np.mean([4, 5, 6, 7]) # 标准差,0.96824583655185426 p = np.std([1, 2, 3, 2, 1, 3, 2, 0])
线性代数模块(linalg)
立志如山 静心求实
浙公网安备 33010602011771号