sovel2
sovel2

Reputation: 415

split big matrix into multiple smaller ones - difficulties

I have a 32*32 matrix and I want to break it into 4 8x8 matrixes.

Here's how I try to make a smaller matrix for top-left part of the big one (pix is a 32x32 matrix).

   A = [[0]*mat_size]*mat_size

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

So, pix has the following values for top-left part:

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

But when I print(A) after the loop, all the rows of A equal to the last row of pix. So it's 8 rows of 198 197 197 199 209 157 38 77 I know I can use A = pix[:8, :8], but I prefer to use loop for some purpose. I wonder why that loop solution doesn't gives me correct result.

Upvotes: 0

Views: 398

Answers (2)

Andre
Andre

Reputation: 103

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]

If I understand your question correctly, this solution should work. What it's doing is iterating through the pix matrix, and selecting a 8*8 matrix each time. Is this what you need?

Upvotes: 1

ibarrond
ibarrond

Reputation: 7621

Consider using numpy in order to avoid multiple references pointing to the same list (the last list in the matrix):

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]

Upvotes: 0

Related Questions