Coding/Python Matlab

Matlab 과 Python 에서 multidimensional array 차이

smores 2022. 8. 27. 20:33

매트랩은 가장 첫 두 인덱스를 기준으로 한 2차원 매트릭스의 다중차원으로 보여주는 반면 Numpy 에서는 인덱스 순서 대로 처리, 즉 마지막 두 인덱스의 2차원 매트릭스의 다중차원 중첩 식으로 보여줌. 예를 들어 ones(3,4,2,2) 라는 것을 구현할 경우

 

매트랩

>> ones(3,4,2,2)
ans(:,:,1,1) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
ans(:,:,2,1) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
ans(:,:,1,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
ans(:,:,2,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1

 

Numpy

>>> c = np.ones((3,4,2,2))
>>> c
array([[[[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]]],

 

       [[[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]]],

       [[[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]],
        [[1., 1.],
         [1., 1.]]]])

 

이 차이가 일반 텐서를 고려할때는 눈에 안보고 해도 상관 없으니 별로 차이가 없어 보이지만 rgb(a) 이미지 데이터를 고려할때는 numpy 에서의 3차원 어레이와 PIL 에서의 이미지 데이터간의 불일치가 있는 것 처럼 느껴진다. 매트랩과 PIL 에서는 무조건 첫 두 인덱스가 한 컬러 레이어의 이미지의 iy, ix 이고 세번째 인덱스가 컬러(알파포함) 인덱스인데, numpy 식으로 하면 이미지 데이터가 아닌 실수 3차원 매트릭스로 일단 데이터 프로세싱을 할 경우 매트릭스를 보려고 하면 매트랩과 달리 단일컬러 이미지의 매트릭스가 아닌 ix, icolor 인덱스에 대한 것을 먼저 보여주게 될 상황인 듯...  (헷갈림)

 

프로그램 문법상의 consistency 는 파이썬이 높은듯 한데, 사용 편의 면에서는 여러가지로 매트랩이 편한 느낌이다.