python numpy数组基本操作

list转numpy数组

>>>a = [1,2,3,4]
>>>a = numpy.array(a)
>>>a
array([1,2,3,4]) >>>a.dtype dtype('int32')

默认类型为int32

>>>a = a.astype('float32')

or

>>>a = numpy.array(a, dtype=numpy.float32)

设置类型为float32

 numpy数组函数

  >>> np.arange(9) 
  array([0, 1, 2, 3, 4, 5, 6, 7, 8])

>>>np.arange(0,8,2)  #从0开始,间隔为2
array([0, 2, 4, 6])
>>>np.ones((2,2,3), dtype=np.int16) #2页,2行,3列,元素全为1,指定数据类型 array([[[1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1]]], dtype=int16) >>>np.zeros((2,2,3)) #2页,2行,3列,元素全为0 >>>np.empty((3,2)) #值取决于内存 array([[1.11821712e-19, 4.36803560e-22], [4.36803561e-22, 1.11821711e-19], [4.36803560e-22, 1.11821712e-19]]) >>>np.linspace(0,5,10) #0到5取10个数 array([0. , 0.55555556, 1.11111111, 1.66666667, 2.22222222, 2.77777778, 3.33333333, 3.88888889, 4.44444444, 5. ]) >>>np.random.randint(0,5,(2,3)) #取0到5内的数,组成2行3列的随机数组 array([[1, 2, 3], [4, 0, 2]])

 

数据类型转换

>>> float(1)
1.0
>>> int(2.0)
2
>>> bool(3)
True
>>> bool(-1)
True
>>> bool(0)
False
>>> float(True)
1.0
>>> float(False)
0.0

 

数组元素级别运算

>>> a = np.array([1,2,3,4])
>>> b = np.arange(4)
>>> a
array([1, 2, 3, 4])
>>> b
array([0, 1, 2, 3])
>>> a-b
array([1, 1, 1, 1])
>>> a+b
array([1, 3, 5, 7])
>>> a*b
array([ 0,  2,  6, 12])
>>> a**2
array([ 1,  4,  9, 16], dtype=int32)
>>> a>2
array([False, False,  True,  True])
>>> np.exp(a) #指数
array([ 2.71828183,  7.3890561 , 20.08553692, 54.59815003])

 

数组矩阵运算

>>> a = np.array([[1,2],[3,4]])
>>> b = np.arange(6).reshape((2,3))
>>> a
array([[1, 2],
       [3, 4]])
>>> b
array([[0, 1, 2],
       [3, 4, 5]])
>>> a.dot(b)
array([[ 6,  9, 12],
       [12, 19, 26]])

 

数组调用方法

参数axis用于指定运算轴,默认全部,axis=0,按列计算,axis=1,按行计算。

>>> a=np.random.randint(0,5,(2,3))
>>> a
array([[2, 0, 2],
       [0, 2, 4]])
>>> a.sum()
10
>>> a.sum(axis=1)
array([4, 6])
>>> a.sum(0)
array([2, 2, 6])
>>> a.min()
0
>>> a.max(axis=1)
array([2, 4])
>>> a.mean(axis=0)
array([1., 1., 3.])
>>> a.cumsum(1)  #按行计算累计和
array([[2, 2, 4],
       [0, 2, 6]], dtype=int32)
>>> a.cumsum(0)  #按列计算累计和
array([[2, 0, 2],
       [2, 2, 6]], dtype=int32)

 

数组索引/切片取值

一维数组

>>> a=np.arange(0,10,1)*2
>>> a
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
>>> a[2]  #从0开始
4
>>> a[-2]  #-1表示最后一个索引
16
>>> a[2:5]   #包括起点,不包括终点
array([4, 6, 8])
>>> a[-5:-1]
array([10, 12, 14, 16])
>>> a[-1] = 100  #赋值
>>> a
>>> a[1:4] = -100  #批量赋值
>>> a
array([   0, -100, -100, -100,    8,   10,   12,   14,   16,  100])
>>> a[:6:2] = -100  #从开始到第6个索引,步长为2的赋值
>>> a
array([-100, -100, -100, -100, -100,   10,   12,   14,   16,  100])
>>> a[::-1]  #a逆序输出,a本身没有发生变化
array([ 100,   16,   14,   12,   10, -100, -100, -100, -100, -100])
>>> a
array([-100, -100, -100, -100, -100,   10,   12,   14,   16,  100])
>>> b = [np.abs(i) for i in a]  #遍历函数赋值
>>> b
[100, 100, 100, 100, 100, 10, 12, 14, 16, 100]

多维数组

>>> a = np.arange(0,20).reshape((4,5))
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a[2,3]
13
>>> a[:1]
array([[0, 1, 2, 3, 4]])
>>> a[1:4,2]
array([ 7, 12, 17])
>>> a[1:3,:]
array([[ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a[-1]
array([15, 16, 17, 18, 19])
>>> a[1]
array([5, 6, 7, 8, 9])

 

数组形状操作

>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[2., 0., 3., 6.],
       [0., 8., 6., 2.],
       [2., 6., 5., 2.]])
>>> a.shape    #输出a的形状
(3, 4)
>>> a.ravel()   #输出平坦化后的a,a本身不改变
array([2., 0., 3., 6., 0., 8., 6., 2., 2., 6., 5., 2.])
>>> a
array([[2., 0., 3., 6.],
       [0., 8., 6., 2.],
       [2., 6., 5., 2.]])
>>> a.shape=(6,2)  #改变a的形状
>>> a
array([[2., 0.],
       [3., 6.],
       [0., 8.],
       [6., 2.],
       [2., 6.],
       [5., 2.]])
>>> a.transpose()  #输出a的转置
array([[2., 3., 0., 6., 2., 5.],
       [0., 6., 8., 2., 6., 2.]])
>>> a
array([[2., 0.],
       [3., 6.],
       [0., 8.],
       [6., 2.],
       [2., 6.],
       [5., 2.]])

 

reshape和resize

在numpy模块中,我们经常会使用resize 和 reshape,在具体使用中,通常是使用resize改变数组的尺寸大小,使用reshape用来增加数组的维度。

resize

resize有两种使用方式,一种是没有返回值的,直接对原始的数据进行修改,还有一种用法是有返回值的,所以不会修改原有的数组值。

1.没有返回值

>>> a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
>>> aa = a.resize((3,3))
>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> aa
>>>    #没有返回值

2.有返回值

>>> a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
>>> aa = np.resize(a,(3,3))
>>> a
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> aa
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
reshape

给数组一个新的形状而不改变其数据。

>>> a = np.array([1,2,3,4,5,6,7,8])
>>> aa=a.reshape((2,4))   #返回2*4的二维数组
>>> aaa=a.reshape((2,2,2))   #返回2*2*2的三维数组
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8])
>>> aa
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
>>> aaa
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

 

posted @ 2022-07-28 19:43  格子叶  阅读(100)  评论(0编辑  收藏  举报