将大型矩阵分解为多个较小的矩阵-困难

时间:2018-08-14 08:51:18

标签: python

我有一个32 * 32的矩阵,我想将其分成4个8x8矩阵。

这是我尝试为大对象的左上部分制作一个较小的矩阵的方法( pix 是32x32的矩阵)。

   A = [[0]*mat_size]*mat_size

   for i in range(mat_ size):
        for j in range(mat_size):
            A[i][j] = pix[i, j]

因此, pix 的左上角部分具有以下值:

198 197 194 194 197 192 189 196
199 199 198 198 199 195 195 145
200 200 201 200 200 204 131  18
201 201 199 201 203 192  57  56
201 200 198 200 207 171  41 141
200 200 198 199 208 160  38 146
198 198 198 198 206 157  39 129
198 197 197 199 209 157  38  77

但是当我print(A)循环后,所有 A 行等于 pix 的最后一行。因此,我知道可以使用198 197 197 199 209 157 38 77的{​​{1}}是8行,但出于某种目的,我更喜欢使用循环。我不知道为什么该循环解决方案无法给我正确的结果。

2 个答案:

答案 0 :(得分:1)

A = np.zeros((4, 4, 8, 8))

for i in range(4):
    for j in range(4):
        A[i, j] = pix[i*8:(i+1)*8, j*8:(j+1)*8]

如果我正确理解了您的问题,则此解决方案应该有效。它的作用是遍历pix矩阵,并每次选择8 * 8矩阵。这是您需要的吗?

答案 1 :(得分:0)

考虑使用numpy以避免多个引用指向同一列表(矩阵中的最后一个列表):

mat_size = 8
A = np.empty((mat_size,mat_size))
pix = np.array(pix)

for i in range(mat_size):
    for j in range(mat_size):
        A[i][j] = pix[i][j]