假定输出np.reshape函数不正确



我有一个名为"foto_dct";形状为(16,16,8,8(,表示8x8的16x16矩阵。

当我打印foto_dct[0.15]时,它是我得到的第一行的最后一个矩阵:

array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])

当我做foto_dct_big=np.reform(foto_dct,(128128((时并打印foto_dct_big我得到这个:

[[  0   0   0 ...  49 148 245]
[  0  16   0 ...  10   0   3]
[  1   4   3 ... 148 137 128]
...
[  0   0   0 ...   0   0   0]
[  0   0   0 ...   0   0   0]
[  0   0   0 ...   0   0   0]]

正如你所看到的,右上角(应该是上面所有零的矩阵(被替换为不同的值。这只是为了证明我确实得到了不同的值,矩阵的其他部分也是假的。

为什么会发生这种情况,我该如何解决?

致以亲切的问候。

使用整形时,维度的顺序很重要,因为这决定了矩阵元素的读取方式。如文档中所述,默认情况下,最后一个维度是最快的维度,然后紧跟在倒数第二个维度之后,依此类推。因此,在您进行整形时,将首先读取两个8x8,并将其整形为128x128矩阵的一行。为了按照正确的顺序进行读取,您首先必须交换尺寸,使与行相关的尺寸(即8x8矩阵的行和16x16矩阵的行(与列相同。你可以用np.transpose.做到这一点

我还没有测试,但我相信这应该工作

a = np.transpose(a, (0, 2, 1, 3)) # The new shape is (16, 8, 16, 8)
a = np.reshape(a, (128, 128))

最新更新