For my last project i need to use a matrix as matrix of “vectorized” submatrices.
For example give the matrix
A = [[1 2 3]
[4 5 6]
[7 8 9]]
The matrix of submatrices with dimension 2x2 is
M = [[ 1 2 4 5]
[ 2 3 5 6]
[ 4 5 7 8]
[ 5 6 8 9]]
Where each row is one of the 2x2 matrix composing A.
For now i’m initializing M with zeros and using a for-loop slicing A to create M but it is time-comsuming ( O (n*m) ).
I was wondering if there exist a more pytorch-y way to do it
This is my code
>>> getSubMatrix = lambda m,i,j : m[i:i+2,j:j+2].contiguous().view(-1,2*2)[0]             
>>>
>>> A = torch.randn(3,3)
>>> M = torch.zeros(4, 2*2)
>>> k = 0
>>> for i in range(0, 2):
...     for j in range(0, 2):
...         M[k] = getSubMatrix(A, i, j)
...         k = k + 1
...
>>> A
tensor([[ 0.4257,  0.7940, -1.2986],
        [ 0.3243, -1.3812, -1.0442],
        [-0.3122,  1.2312,  0.9811]])
>>> M
tensor([[ 0.4257,  0.7940,  0.3243, -1.3812],                                             
        [ 0.7940, -1.2986, -1.3812, -1.0442],                                             
        [ 0.3243, -1.3812, -0.3122,  1.2312],                                             
        [-1.3812, -1.0442,  1.2312,  0.9811]])                                            
>>>

Thanks a lot