科普网站建设目前最好的营销模式
说实话,我也奇怪我怎么会有这么奇怪的需求,,,
把二维数组拆分为三维数组
目标:把一个m∗nm*nm∗n的数组,每x行为一页(x可被m整除),拆分为一个m行n列x页的三维数组
代码
import numpy as np
a = np.arange(30)
a.resize(6,5)
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, 24],[25, 26, 27, 28, 29]])
a.reshape(3,2,5) # 3页,2行,5列
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, 24],[25, 26, 27, 28, 29]]])
把三维数组拆为四维数组
a=np.arange(60)
a.resize(6,2,5)
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, 24],[25, 26, 27, 28, 29]],[[30, 31, 32, 33, 34],[35, 36, 37, 38, 39]],[[40, 41, 42, 43, 44],[45, 46, 47, 48, 49]],[[50, 51, 52, 53, 54],[55, 56, 57, 58, 59]]])
a.resize(3, 2, 2, 5)
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, 24],[25, 26, 27, 28, 29]],[[30, 31, 32, 33, 34],[35, 36, 37, 38, 39]]],[[[40, 41, 42, 43, 44],[45, 46, 47, 48, 49]],[[50, 51, 52, 53, 54],[55, 56, 57, 58, 59]]]])
a从6页2行5列,被拆为3部分2页2行5列,可以看到直接用resize把待拆分数组的第一维直接因子分解,得到的拆分结果不会乱序。
如果对得到的四维数组转置,比如把第二维和第三维换了
a.transpose(0, 2, 1, 3)
array([[[[ 0, 1, 2, 3, 4],[10, 11, 12, 13, 14]],[[ 5, 6, 7, 8, 9],[15, 16, 17, 18, 19]]],[[[20, 21, 22, 23, 24],[30, 31, 32, 33, 34]],[[25, 26, 27, 28, 29],[35, 36, 37, 38, 39]]],[[[40, 41, 42, 43, 44],[50, 51, 52, 53, 54]],[[45, 46, 47, 48, 49],[55, 56, 57, 58, 59]]]])
注意a.transpose(0, 2, 1, 3)
并不会概念a,如果要把转置得到的矩阵存下来就必须赋值,如b=a.transpose(0, 2, 1, 3)
,这样b就是转置后的矩阵,a并未变化。
b=numpy.array([[1,2],[3,4]])
c=b.transpose(1,0)
b
Out[16]:
array([[1, 2],[3, 4]])
c
Out[17]:
array([[1, 3],[2, 4]])