ndarray数组维度操作

  1. import numpy as np

一、ndarray的形状

  1. #见形状操作

二、视图变维

  1. a = np.arange(1,9)
  2. print(a)
  3. b = a.reshape(2,4) #视图变维 :变成2行4列的二维数组
  4. print(b)
  5. c = b.reshape(2,2,2) #视图变维 变成2页2行2列的三维数组
  6. print(c)
  7. d = c.ravel() #s视图变维 变成一维数组
  8. print(d)
  1. [1 2 3 4 5 6 7 8]
  2. [[1 2 3 4]
  3. [5 6 7 8]]
  4. [[[1 2]
  5. [3 4]]
  6. [[5 6]
  7. [7 8]]]
  8. [1 2 3 4 5 6 7 8]

三、复制变维(数据独立):flatten()

  1. e = c.flatten() #变成一维数组
  2. print(e)
  3. a += 10
  4. print(a,e,sep='\n')
  1. [41 42 43 44 45 46 47 48]
  2. [51 52 53 54 55 56 57 58]
  3. [41 42 43 44 45 46 47 48]

四、就地变维:直接改变原数组对象的维度,不返回新数组

  1. a.shape = (2,4)
  2. print(a)
  3. a.resize(2,2,2)
  4. print(a)
  1. [[51 52 53 54]
  2. [55 56 57 58]]
  3. [[[51 52]
  4. [53 54]]
  5. [[55 56]
  6. [57 58]]]

多维数组的组合与拆分

一、垂直方向操作:vstack()

  1. import numpy as np
  2. a = np.arange(1,7).reshape(2,3)
  3. b = np.arange(7,13).reshape(2,3)
  4. print(a)
  5. print(b)
  6. #垂直方向完成组合操作,生成新数组
  7. c = np.vstack((a,b))
  8. c
  9. #垂直方向完成拆分操作,生成两个数组
  10. d,e = np.vsplit(c,2)
  11. d,e
  12. d,e,f,g = np.vsplit(c,4)
  13. d,e,f,g
  1. [[1 2 3]
  2. [4 5 6]]
  3. [[ 7 8 9]
  4. [10 11 12]]
  5. (array([[1, 2, 3]]),
  6. array([[4, 5, 6]]),
  7. array([[7, 8, 9]]),
  8. array([[10, 11, 12]]))

二、水平方向操作:hstack()

  1. import numpy as np
  2. a = np.arange(1,7).reshape(2,3)
  3. b = np.arange(7,13).reshape(2,3)
  4. a,b
  5. #水平方向完成组合操作,生成新数组
  6. c = np.hstack((a,b))
  7. c
  8. #水平方向完成拆分操作,生成两个数组
  9. d,e = np.hsplit(c,2)
  10. d,e
  1. (array([[1, 2, 3],
  2. [4, 5, 6]]), array([[ 7, 8, 9],
  3. [10, 11, 12]]))

三、深度方向操作:dstack()(3维)

  1. import numpy as np
  2. a = np.arange(1,7).reshape(2,3)
  3. b = np.arange(7,13).reshape(2,3)
  4. print(a)
  5. print(b)
  6. #深度方向(3维)完成组合操作,生成新数组
  7. i = np.dstack((a,b))
  8. print(i)
  9. # 深度方向(3维)完成拆分操作,生成两个数组
  10. k,l = np.dsplit(i,2)
  11. print(k)
  12. print(l)
  1. [[1 2 3]
  2. [4 5 6]]
  3. [[ 7 8 9]
  4. [10 11 12]]
  5. [[[ 1 7]
  6. [ 2 8]
  7. [ 3 9]]
  8. [[ 4 10]
  9. [ 5 11]
  10. [ 6 12]]]
  11. [[[1]
  12. [2]
  13. [3]]
  14. [[4]
  15. [5]
  16. [6]]]
  17. [[[ 7]
  18. [ 8]
  19. [ 9]]
  20. [[10]
  21. [11]
  22. [12]]]

四、长度不相等的数组组合

  1. import numpy as np
  2. a = np.array([1,2,3,4,5])
  3. b = np.array([1,2,3,4])
  4. a,b
  5. #填充b数组使其长度与a相同
  6. b = np.pad(b,pad_width=(0,1),mode='constant',constant_values = -1)
  7. b
  8. #垂直方向完成组合操作,生成新数组
  9. c = np.vstack((a,b))
  10. c
  1. array([[ 1, 2, 3, 4, 5],
  2. [ 1, 2, 3, 4, -1]])

多维数组组合与拆分的相关函数:

  1. # 通过axis作为关键字参数指定组合的方向,取值如下
  2. #若待组合的数组都是二维数组:
  3. # 0 : 垂直方向组合
  4. # 1 : 水平方向组合
  5. # 若带组合的数组都是三维数组:
  6. # 0 : 垂直方向组合
  7. # 1 : 水平方向组合
  8. # 2 : 深度方向组合
  9. np.concatenate((a,b),axis = 0)
  10. #通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
  11. np.split(c,2,axis = 0)
  1. [array([[1, 2, 3, 4, 5]]), array([[ 1, 2, 3, 4, -1]])]

简单的一维数组组合方案

  1. a = np.arange(1,9)
  2. b = np.arange(9,17)
  3. #把两个数组摞在一起成两行
  4. c = np.row_stack((a,b))
  5. c
  6. #把两个数组组合在一起成两列
  7. d = np.column_stack((a,b))
  8. d
  1. array([[ 1, 9],
  2. [ 2, 10],
  3. [ 3, 11],
  4. [ 4, 12],
  5. [ 5, 13],
  6. [ 6, 14],
  7. [ 7, 15],
  8. [ 8, 16]])

将一个数组拆分维几个较小的数组

  1. # hsplit #沿数组的水平轴拆分数组
  2. # vsplit #沿数组的垂直轴拆分数组
  3. # array_split #指定沿哪个轴进行分割
  1. ---------------------------------------------------------------------------
  2. NameError Traceback (most recent call last)
  3. <ipython-input-61-439fce26016d> in <module>()
  4. ----> 1 hsplit #沿数组的水平轴拆分数组
  5. 2 vsplit #沿数组的垂直轴拆分数组
  6. 3 array_split #指定沿哪个轴进行分割
  7. NameError: name 'hsplit' is not defined