数组转换

维度变换

  • reshape(shape)
>>> import  numpy as np
>>> a=np.ones((2,3,4))
>>> a.reshape((3,8))			不改变元素,返回一个shape形状的数组,原数组不变
array([[1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.]])
>>> a
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
  • resize(shape)
a=np.ones((2,3,4))
>>> a.resize((3,8))				与reshape功能一致,但改变原数组
>>> a
array([[1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.]])
  • flatten()
>>> a=np.ones((2,3,4))
>>> a.flatten()			对数组进行降维,折叠成一维数组,原数组不变
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
       1., 1., 1., 1., 1., 1., 1.])
>>> a
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])

类型转换

  • astype(float)
>>> a=np.ones((2,3,4),dtype=np.int)
>>> a
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]])
>>> a.astype(float)					创建一个新数组,改变数组类型,常用于拷贝一个数组
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
  • tolist()
>>> a=np.ones((2,3,4),dtype=np.int)
>>> a.tolist()						数组向列表转换
[[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]
  • array()
(需要调用numpy模块的array方法)
>>> from numpy import array
>>> b= a.tolist()
>>> b
[[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]
>>> array(b)						列表向数组转换
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]])

数组的运算

数组与标量之间的运算
  • 数组与标量之间的运算作用与数组的每一个元素
>>> a=np.arange(24).reshape((2,3,4))
>>> a
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> a+1
array([[[ 1,  2,  3,  4],
        [ 5,  6,  7,  8],
        [ 9, 10, 11, 12]],

       [[13, 14, 15, 16],
        [17, 18, 19, 20],
        [21, 22, 23, 24]]])
>>> a-10
array([[[-10,  -9,  -8,  -7],
        [ -6,  -5,  -4,  -3],
        [ -2,  -1,   0,   1]],

       [[  2,   3,   4,   5],
        [  6,   7,   8,   9],
        [ 10,  11,  12,  13]]])
>>> a*2
array([[[ 0,  2,  4,  6],
        [ 8, 10, 12, 14],
        [16, 18, 20, 22]],

       [[24, 26, 28, 30],
        [32, 34, 36, 38],
        [40, 42, 44, 46]]])
>>> a/0.5
array([[[ 0.,  2.,  4.,  6.],
        [ 8., 10., 12., 14.],
        [16., 18., 20., 22.]],

       [[24., 26., 28., 30.],
        [32., 34., 36., 38.],
        [40., 42., 44., 46.]]])
一元运算函数
 - mean()							计算平均值
 - np.abs() np.fabs()				计算数组各元素的绝对值(浮点数)
 - np.sqrt()						计算数组各元素的平方根
 - np.square()						计算数组各元素的平方
 - np.log()/np.log2()/np.log10()	计算各元素的自然对数,2底对数,10底对数
 - np.rint()						计算数组各元素的四舍五入值
 - np.exp()							计算数组各元素的指数值
>>> a=np.arange(24).reshape((2,3,4))
>>> a
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> a.mean()				
11.5
>>> np.abs(a-10)			
array([[[10,  9,  8,  7],
        [ 6,  5,  4,  3],
        [ 2,  1,  0,  1]],

       [[ 2,  3,  4,  5],
        [ 6,  7,  8,  9],
        [10, 11, 12, 13]]])
>>> np.fabs(a-10)			
array([[[10.,  9.,  8.,  7.],
        [ 6.,  5.,  4.,  3.],
        [ 2.,  1.,  0.,  1.]],

       [[ 2.,  3.,  4.,  5.],
        [ 6.,  7.,  8.,  9.],
        [10., 11., 12., 13.]]])
>>> np.sqrt(a)				
>>> np.square(a)			
array([[[  0,   1,   4,   9],
        [ 16,  25,  36,  49],
        [ 64,  81, 100, 121]],

       [[144, 169, 196, 225],
        [256, 289, 324, 361],
        [400, 441, 484, 529]]], dtype=int32)
>>> np.log(a+1)
>>> np.log2(a+1)
>>> np.log10(a+1)
>>> np.rint(a+0.5)
array([[[ 0.,  2.,  2.,  4.],
        [ 4.,  6.,  6.,  8.],
        [ 8., 10., 10., 12.]],

       [[12., 14., 14., 16.],
        [16., 18., 18., 20.],
        [20., 22., 22., 24.]]])
>>> np.exp(a)
数组与数组之间的运算
  • 算数运算与算数比较
>>> a=np.arange(24).reshape((2,3,4))
>>> b=np.arange(24).reshape((2,3,4))
>>> a
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> a+b						数组相加
array([[[ 0,  2,  4,  6],
        [ 8, 10, 12, 14],
        [16, 18, 20, 22]],

       [[24, 26, 28, 30],
        [32, 34, 36, 38],
        [40, 42, 44, 46]]])
>>> a-b						数组相减
array([[[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]])
>>> a*b						乘法
array([[[  0,   1,   4,   9],
        [ 16,  25,  36,  49],
        [ 64,  81, 100, 121]],

       [[144, 169, 196, 225],
        [256, 289, 324, 361],
        [400, 441, 484, 529]]])
>>> a/b					除法(因为0不能作为被除数所以会有一个错误,nan为空值)
__main__:1: RuntimeWarning: invalid value encountered in true_divide
array([[[nan,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],

       [[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]]])
>>> a==b
array([[[ True,  True,  True,  True],
        [ True,  True,  True,  True],
        [ True,  True,  True,  True]],

       [[ True,  True,  True,  True],
        [ True,  True,  True,  True],
        [ True,  True,  True,  True]]])
>>> a > b
>>> a < b
>>>	a >= b
>>> a <= b
>>> a != b
二元运算函数
 - np.mod(x,y)					元素级的模运算
 - np.maximum(x,y)np.fmax()		元素级的最大值运算
 - np.minimum(x,y)np.fmin()		元素级的最大值运算
 - np.copysign(x,y)				将数组y中的各元素值的符号赋值给数组x对应元素
>>> a=np.arange(24).reshape((2,3,4))
>>> b=np.arange(24).reshape((2,3,4))
>>> np.maximum(a,b+10)
array([[[10, 11, 12, 13],
        [14, 15, 16, 17],
        [18, 19, 20, 21]],

       [[22, 23, 24, 25],
        [26, 27, 28, 29],
        [30, 31, 32, 33]]])
>>> np.minimum(a,b+10)
>>> np.mod(a,b+1)
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]], dtype=int32)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐