Python 如何按我需要的方式重塑此阵列?
我想重塑一个由三个2x2矩阵组成的数组,即形状为(3,2,2),即 对于此形状数组(2,2,3): 常规的Python 如何按我需要的方式重塑此阵列?,python,arrays,numpy,reshape,Python,Arrays,Numpy,Reshape,我想重塑一个由三个2x2矩阵组成的数组,即形状为(3,2,2),即 对于此形状数组(2,2,3): 常规的np.reformate(a,(2,2,3))返回以下数组: [[[a1, a2, a3],[a4, b1, b2]], [[b3, b4, c1],[c2, c3, c4]]] 和np。重塑(a,(2,2,3),顺序='F')带来了: [[[a1, b3, c2],[c1, a2, b4]], [[b1, c3, a4],[a3, b2, c4]]] 如何重塑初始阵列以获得所需的
np.reformate(a,(2,2,3))
返回以下数组:
[[[a1, a2, a3],[a4, b1, b2]],
[[b3, b4, c1],[c2, c3, c4]]]
和np。重塑(a,(2,2,3),顺序='F')
带来了:
[[[a1, b3, c2],[c1, a2, b4]],
[[b1, c3, a4],[a3, b2, c4]]]
如何重塑初始阵列以获得所需的
这是为了与matplotlib.pyplot.imshow一起使用,其中三个初始矩阵对应于三种颜色“RGB”,并且每个元素都是[0,1]范围内的浮点。因此,如果有更好的方法,我很乐意知道。您想要的是转置:
输出:
[[['a1' 'b1' 'c1']
['a2' 'b2' 'c2']]
[['a3' 'b3' 'c3']
['a4' 'b4' 'c4']]]
我们只需要排列轴。有两种方法可以做到这一点
使用np.转置-
a.transpose(1,2,0) # a is input array
# or np.transpose(a,(1,2,0))
我们也可以使用np.moveaxis
-
np.moveaxis(a,0,2) # np.moveaxis(a, 0, -1)
样本运行-
In [157]: np.random.seed(0)
In [158]: a = np.random.randint(11,99,(3,2,2))
In [159]: a
Out[159]:
array([[[55, 58],
[75, 78]],
[[78, 20],
[94, 32]],
[[47, 98],
[81, 23]]])
In [160]: a.transpose(1,2,0)
Out[160]:
array([[[55, 78, 47],
[58, 20, 98]],
[[75, 94, 81],
[78, 32, 23]]])
查看转置(顺序)
。您可能需要尝试几个变体,更多解释请参见
a.transpose(1,2,0) # a is input array
# or np.transpose(a,(1,2,0))
np.moveaxis(a,0,2) # np.moveaxis(a, 0, -1)
In [157]: np.random.seed(0)
In [158]: a = np.random.randint(11,99,(3,2,2))
In [159]: a
Out[159]:
array([[[55, 58],
[75, 78]],
[[78, 20],
[94, 32]],
[[47, 98],
[81, 23]]])
In [160]: a.transpose(1,2,0)
Out[160]:
array([[[55, 78, 47],
[58, 20, 98]],
[[75, 94, 81],
[78, 32, 23]]])