ndarray数组维度操作
import numpy as np
一、ndarray的形状
#见形状操作
二、视图变维
a = np.arange(1,9)print(a)b = a.reshape(2,4) #视图变维 :变成2行4列的二维数组print(b)c = b.reshape(2,2,2) #视图变维 变成2页2行2列的三维数组print(c)d = c.ravel() #s视图变维 变成一维数组print(d)
[1 2 3 4 5 6 7 8][[1 2 3 4][5 6 7 8]][[[1 2][3 4]][[5 6][7 8]]][1 2 3 4 5 6 7 8]
三、复制变维(数据独立):flatten()
e = c.flatten() #变成一维数组print(e)a += 10print(a,e,sep='\n')
[41 42 43 44 45 46 47 48][51 52 53 54 55 56 57 58][41 42 43 44 45 46 47 48]
四、就地变维:直接改变原数组对象的维度,不返回新数组
a.shape = (2,4)print(a)a.resize(2,2,2)print(a)
[[51 52 53 54][55 56 57 58]][[[51 52][53 54]][[55 56][57 58]]]
多维数组的组合与拆分
一、垂直方向操作:vstack()
import numpy as npa = np.arange(1,7).reshape(2,3)b = np.arange(7,13).reshape(2,3)print(a)print(b)#垂直方向完成组合操作,生成新数组c = np.vstack((a,b))c#垂直方向完成拆分操作,生成两个数组d,e = np.vsplit(c,2)d,ed,e,f,g = np.vsplit(c,4)d,e,f,g
[[1 2 3][4 5 6]][[ 7 8 9][10 11 12]](array([[1, 2, 3]]),array([[4, 5, 6]]),array([[7, 8, 9]]),array([[10, 11, 12]]))
二、水平方向操作:hstack()
import numpy as npa = np.arange(1,7).reshape(2,3)b = np.arange(7,13).reshape(2,3)a,b#水平方向完成组合操作,生成新数组c = np.hstack((a,b))c#水平方向完成拆分操作,生成两个数组d,e = np.hsplit(c,2)d,e
(array([[1, 2, 3],[4, 5, 6]]), array([[ 7, 8, 9],[10, 11, 12]]))
三、深度方向操作:dstack()(3维)
import numpy as npa = np.arange(1,7).reshape(2,3)b = np.arange(7,13).reshape(2,3)print(a)print(b)#深度方向(3维)完成组合操作,生成新数组i = np.dstack((a,b))print(i)# 深度方向(3维)完成拆分操作,生成两个数组k,l = np.dsplit(i,2)print(k)print(l)
[[1 2 3][4 5 6]][[ 7 8 9][10 11 12]][[[ 1 7][ 2 8][ 3 9]][[ 4 10][ 5 11][ 6 12]]][[[1][2][3]][[4][5][6]]][[[ 7][ 8][ 9]][[10][11][12]]]
四、长度不相等的数组组合
import numpy as npa = np.array([1,2,3,4,5])b = np.array([1,2,3,4])a,b#填充b数组使其长度与a相同b = np.pad(b,pad_width=(0,1),mode='constant',constant_values = -1)b#垂直方向完成组合操作,生成新数组c = np.vstack((a,b))c
array([[ 1, 2, 3, 4, 5],[ 1, 2, 3, 4, -1]])
多维数组组合与拆分的相关函数:
# 通过axis作为关键字参数指定组合的方向,取值如下#若待组合的数组都是二维数组:# 0 : 垂直方向组合# 1 : 水平方向组合# 若带组合的数组都是三维数组:# 0 : 垂直方向组合# 1 : 水平方向组合# 2 : 深度方向组合np.concatenate((a,b),axis = 0)#通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上np.split(c,2,axis = 0)
[array([[1, 2, 3, 4, 5]]), array([[ 1, 2, 3, 4, -1]])]
简单的一维数组组合方案
a = np.arange(1,9)b = np.arange(9,17)#把两个数组摞在一起成两行c = np.row_stack((a,b))c#把两个数组组合在一起成两列d = np.column_stack((a,b))d
array([[ 1, 9],[ 2, 10],[ 3, 11],[ 4, 12],[ 5, 13],[ 6, 14],[ 7, 15],[ 8, 16]])
将一个数组拆分维几个较小的数组
# hsplit #沿数组的水平轴拆分数组# vsplit #沿数组的垂直轴拆分数组# array_split #指定沿哪个轴进行分割
---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-61-439fce26016d> in <module>()----> 1 hsplit #沿数组的水平轴拆分数组2 vsplit #沿数组的垂直轴拆分数组3 array_split #指定沿哪个轴进行分割NameError: name 'hsplit' is not defined
