stMind

about Tech, Computer vision and Machine learning

matlabでは行列を行ベクトルにするとcolumn major order

3x3の行列Aを9x1の行ベクトルに直すと、1, 2, 3, 4, 5, 6, 7, 8, 9となると思っていたら、1, 4, 7, 2, 5, 8, 3, 6, 9だった... (column major order)

>> A

A =

     1     2     3
     4     5     6
     7     8     9

>> A(:)

ans =

     1
     4
     7
     2
     5
     8
     3
     6
     9

>> 

ちなみに、numpyだと指定しない限り、row major orderになる。

In [15]: A
Out[15]: 
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

In [16]: np.ravel(A)
Out[16]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])

In [17]: np.ravel(A, order='F')
Out[17]: array([1, 4, 7, 2, 5, 8, 3, 6, 9])