Reputation: 117
I have a 2d big matrix and I want to extrapolate submatrices from elements considering the first neighbours, with periodic boundaries. I did something like this:
neighborhood = big_matrix[x-1:x+2, y-1:y+2]
but this only works for every [x, y]
in the middle of the matrix but not for elements in the borders like [0, 0]
where indexing like [-1:2, -1:2]
gives an empty array.
I think I have to use some sort of 2D np.roll
but I don't know how to do it in a clean and efficient way.
Thanks in advance!
Upvotes: 1
Views: 145
Reputation: 117
By playing with the roll function in numpy I found the solution (roll the arrays of +1-x, +1-y and get the first 3x3 matrix)
np.roll(big_matrix, (1-x, 1-y), axis=(0, 1))[:3, :3]
Upvotes: 0
Reputation: 116
Not sure if it is the solution you are looking for:
import numpy as np
x=0
y=0
big_matrix = np.random.randint(5, size=(10,10))
print(big_matrix)
#new_matrix = big_matrix[x-1 :x+2, y-1:y+2]
new_matrix = big_matrix[x if x==0 else x-1 :x+2, y if y==0 else y-1:y+2]
new_matrix
Upvotes: 1