a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
벡터를 얻기 위해 하나의 함수를 어떻게 호출 할 수 있습니까? v[i] = a[b[i],i]
?matlab에서 행렬의 각 열에서 하나의 요소를 선택하는 방법은 무엇입니까?
a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
벡터를 얻기 위해 하나의 함수를 어떻게 호출 할 수 있습니까? v[i] = a[b[i],i]
?matlab에서 행렬의 각 열에서 하나의 요소를 선택하는 방법은 무엇입니까?
v = a(sub2ind(size(a), b, 1:length(b)))
sub2ind
하위 색인을 단일 색인으로 변환합니다.
또 다른 한가지는 사용자의 설명에 매우 가깝게 두는 것이고 arrayfun
기능을 사용할 수 있습니다.
우선 x
값을 원하는 출력으로 매핑하는 함수를 정의하십시오.
fn = @(x) a(b(x), x);
그런 다음 i
벡터의 각 입력에 대해 해당 함수를 호출하십시오.
i = 1:3;
v = arrayfun(fn, i);
또는,이 모두가 명백한 방법으로, 하나의 라인으로 수행 할 수 있습니다
for ixLoop = 1:3
v(ixLoop) = a(b(ixLoop),ixLoop);
end
관련 :
v = arrayfun(@(x) a(b(x), x), 1:3);
이 arrayfun
속기는 아래의 루프 단순히 기능 arrayfun
, cellfun
및 structfun
도 비슷한 용도로 사용되며 이상하게 작동됩니다. This Joel article 나를 믿는 사람으로 설득했다.