matlab

매트랩 인덱스 행렬 만들기

게으른 the lazy 2023. 2. 26. 02:42

깃헙 페이지

 

매트랩에서 기본으로 제공하는 방법은 symbolic을 활용하는 것이다.

 

>> A = sym('A', [2, 4])
A =
[A1_1, A1_2, A1_3, A1_4]
[A2_1, A2_2, A2_3, A2_4]

 

숫자로 구성된 행렬을 만들고 싶다면, 함수를 만들어서 써야 한다. 아래는 함수 코드와 실행 결과이다. cell unpacking이 활용되었다.

 

function arr = idx_mat(varargin)

arr_cell = cell(nargin, 1);
idx = cell(nargin, 1);

for i=1:nargin
    idx{i} = 1:varargin{i};
end

[arr_cell{:}] = ndgrid(idx{:});

arr = zeros(varargin{:});

for i=1:nargin
    arr = arr + 10^(nargin-i)*arr_cell{i};
end

end

 

>> idx_mat(3, 4)
ans =
    11    12    13    14
    21    22    23    24
    31    32    33    34
>> idx_mat(3, 4, 2)
ans(:,:,1) =
   111   121   131   141
   211   221   231   241
   311   321   331   341
ans(:,:,2) =
   112   122   132   142
   212   222   232   242
   312   322   332   342