繁体   English   中英

无法将3维NumPy数组重塑为2维NumPy数组

[英]Trouble reshaping 3-d NumPy array into 2-d NumPy array

我正在处理图像处理问题,我的数据显示为3维NumPy数组,其中(x,y,z)项是图像z的(x,y)像素(数值强度值) 。 有100000张图像,每个图像为25x25。 因此,数据矩阵的大小为25x25x10000。 我正在尝试将其转换为大小为10000x625的二维矩阵,其中每一行都是图像中像素的线性化。 例如,假设图像是3x3,我们将具有以下内容:

1 2 3
4 5 6  ------> [1, 2, 3, 4, 5, 6, 7, 8, 9]
7 8 9

我试图通过调用data.reshape((10000, 625))来做到这一点,但是这样做之后数据不再正确对齐。 我曾尝试在重塑的有效阶段对矩阵进行转置,但这似乎无法解决。

有谁知道如何解决这一问题?

如果要对齐数据,则需要执行data.reshape((625, 10000))

如果您想要其他布局,请尝试np.rollaxis

data_rolled = np.rollaxis(data, 2, 0) # This is Shape (10000, 25, 25)
data_reshaped = data_rolled.reshape(10000, 625) # Now you can do your reshape.

Numpy需要您在重塑期间知道哪些元素属于一起,因此仅“合并”属于一起的维度。

问题在于您在reshape调用中没有遵守标准索引顺序。 仅当要合并的两个维度在新数组中的相同位置( (25, 25, 10000) -> (625, 10000) )时(625, 10000)数据才会对齐。

然后,要获得所需的形状,可以进行转置。 通过较小的示例可以更轻松地实现可视化-遇到此类问题时,请尽可能在REPL中尝试较小的示例。

>>> a = numpy.arange(12)
>>> a = a.reshape(2, 2, 3)
>>> a
array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])
>>> a.reshape(4, 3)
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
>>> a.reshape(4, 3).T
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

无需rollaxis

注意numpy使用的打印布局如何使这种推理更容易。 第一步和第二步之间的区别在于括号位置; 这些数字都位于同一位置,这在您需要考虑形状问题时通常会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM