如何按照我需要的方式重塑这个数组?
How to reshape this array the way I need?
我正在寻找形状为 (3,2,2) 的三个 2x2 矩阵的数组,即
a = np.array([[[a1,a2],[a3,a4]],
[[b1,b2],[b3,b4]],
[[c1,c2],[c3,c4]]])
到这个形状数组 (2,2,3):
[[[a1,b1,c1],[a2,b2,c2]],
[[a3,b3,c3],[a4,b4,c4]]])
常规np.reshape(a, (2,2,3))
returns这个数组:
[[[a1, a2, a3],[a4, b1, b2]],
[[b3, b4, c1],[c2, c3, c4]]]
和 np.reshape(a, (2,2,3), order = 'F')
带来了这个:
[[[a1, b3, c2],[c1, a2, b4]],
[[b1, c3, a4],[a3, b2, c4]]]
如何重塑初始数组以获得我需要的?
这是为了与 matplotlib.pyplot.imshow
一起使用,其中三个初始矩阵对应于三种颜色 'RGB',并且每个元素都是 [0,1] 范围内的浮点数。因此,如果有更好的方法,我也很乐意知道。
你要的是转置:
a = np.array([[['a1', 'a2'],['a3', 'a4']],
[['b1', 'b2'],['b3', 'b4']],
[['c1', 'c2'],['c3', 'c4']]])
print(np.rollaxis(a, 1, 3).T)
输出:
[[['a1' 'b1' 'c1']
['a2' 'b2' 'c2']]
[['a3' 'b3' 'c3']
['a4' 'b4' 'c4']]]
我们只需要排列轴。有两种方法。
使用np.transpose
-
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]]])
我正在寻找形状为 (3,2,2) 的三个 2x2 矩阵的数组,即
a = np.array([[[a1,a2],[a3,a4]],
[[b1,b2],[b3,b4]],
[[c1,c2],[c3,c4]]])
到这个形状数组 (2,2,3):
[[[a1,b1,c1],[a2,b2,c2]],
[[a3,b3,c3],[a4,b4,c4]]])
常规np.reshape(a, (2,2,3))
returns这个数组:
[[[a1, a2, a3],[a4, b1, b2]],
[[b3, b4, c1],[c2, c3, c4]]]
和 np.reshape(a, (2,2,3), order = 'F')
带来了这个:
[[[a1, b3, c2],[c1, a2, b4]],
[[b1, c3, a4],[a3, b2, c4]]]
如何重塑初始数组以获得我需要的?
这是为了与 matplotlib.pyplot.imshow
一起使用,其中三个初始矩阵对应于三种颜色 'RGB',并且每个元素都是 [0,1] 范围内的浮点数。因此,如果有更好的方法,我也很乐意知道。
你要的是转置:
a = np.array([[['a1', 'a2'],['a3', 'a4']],
[['b1', 'b2'],['b3', 'b4']],
[['c1', 'c2'],['c3', 'c4']]])
print(np.rollaxis(a, 1, 3).T)
输出:
[[['a1' 'b1' 'c1']
['a2' 'b2' 'c2']]
[['a3' 'b3' 'c3']
['a4' 'b4' 'c4']]]
我们只需要排列轴。有两种方法。
使用np.transpose
-
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]]])