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