2017-06-22 69 views
0

如何将(4,n,m)大小的numpy数组重塑为(n*m,4)数组?在python中重塑数组

动机来自处理图像,我想创建一个矩阵,其中行包含每个像素的RGBA值。我试过np.array.reshape(n*m,4),但它没有完成这项工作。也许与movaxisswapaxis结合?

+2

欢迎来到stackoverflow!请参考[游览](http://stackoverflow.com/tour), [请教如何提问](https://stackoverflow.com/help/asking) 并提供[最小化,完整和可验证的示例](https://stackoverflow.com/help/mcve) ,重现您的问题。 特别提供输入,期望的输出和您编码解决方案的尝试。 –

+0

你首先需要'swapaxes'或'transpose',所以形状是(n,m,4) – hpaulj

回答

0

的最简单的方法是将它重塑到(4, n*m)第一,然后只(使用transpose或简单地.T属性例如)交换所述第一和最后一个轴:

arr = arr.reshape(4, n*m).T # assuming your array is called "arr" 

例如:

>>> import numpy as np 
>>> n, m = 20, 30 
>>> arr = np.arange(4*n*m).reshape(4, n, m) 
>>> arr = arr.reshape(4, n*m).T 
>>> arr 
array([[ 0, 600, 1200, 1800], 
     [ 1, 601, 1201, 1801], 
     [ 2, 602, 1202, 1802], 
     ..., 
     [ 597, 1197, 1797, 2397], 
     [ 598, 1198, 1798, 2398], 
     [ 599, 1199, 1799, 2399]]) 
+0

'arr.transpose(1,2,0)'可能比默认的(2,1,0)更好, '。 – hpaulj

+0

@hpaulj在“转置”时,数组只有2D。 – MSeifert