문제

나는 Matlab을 처음 접했지만 문서를 트롤링했으며 내가 찾고있는 것에 대한 답을 찾을 수 없습니다.

매트릭스에 대해 여러 계산을 수행했으며 인덱스 목록과 해당 지수에 들어가야하는 값 목록으로 끝났습니다.

예를 들어:

Data =

         0         0         0         0         0         0
    3.7417    3.7417    3.7417    7.0711    3.3166    3.3166
    4.2426    4.2426    3.7417    7.0711    5.3852    7.0711
    7.0711    6.0828    5.3852    7.4833    6.0828    7.6158
    7.1414    7.4833    7.8740    8.7750    7.1414    7.8740

그리고

Indices =

     1     2     3     4     5     6
     3     3     1     1     6     5
     2     1     2     6     3     4
     4     5     5     2     2     2
     5     4     6     5     1     3

내가 할 수있는 것은 정사각형 행렬 (인덱스 매트릭스에서 발견 된 가장 큰 값 지수를 기반으로 한 크기 N)을 구성하는 것입니다. Indices 첫 번째 행을 색인하는 데 사용됩니다 Result 매트릭스 및 값 Data 해당 위치에 배치됩니다 Result 모든 장소가 데이터 세트로 0으로 인덱싱되지 않은 매트릭스.

즉, 위의 데이터 및 인덱스 행렬과 함께 나는 최종 행렬이 다음과 같이 보이기를 원합니다.

Result =
          0   4.2426    3.7417    7.0711    7.1414         0
     4.2426        0    3.7417    7.4833    6.0828         0
     3.7417   3.7417         0         0    5.3852    7.8740 
     7.0711   7.4833         0         0    8.7750    7.0711
     7.1414   6.0828    5.3852         0         0    3.3166
          0   7.6158    7.8740    7.0711    3.3166         0

(내가 손으로 한 것처럼 위의 실수가있을 수 있지만 내가하고 싶은 일에 대한 아이디어를 제공해야합니다).

Matlab 에서이 작업을 수행하는 쉬운 방법이 있습니까? 많은 기능이 지수를 반환하고 이러한 지수를 사용하여 행렬을 업데이트/구성하는 쉬운 방법이 있기를 바랍니다.

감사,

그렉

도움이 되었습니까?

해결책

내가하는 방법을 아는 가장 깨끗한 방법은 데이터와 지수를 기반으로 스파 스 매트릭스를 만드는 것입니다.

[M,N] = size(Indices); indmax = max(Indices(:));
Result = sparse(repmat(1:N,M,1),Indices,Data,indmax,indmax);

바라건대 누군가가 와서 우리에게 더 깨끗한 방법을 보여줍니다.

다른 팁

당신이 설명하는 것은 다음과 같이 달성됩니다.

[II,JJ]=meshgrid(1:size(Data,2),1:size(Data,1));
Result = zeros(size(Data,2));
Result(sub2ind(size(Result),II(:),Indices(:))) = Data(:);

얻는다 II through the meshgrid 진술은 동일합니다 II=repmat(1:size(Data,2),size(Data,1),1);.

이 솔루션을 기반으로합니다 bsxfun, @nispio와 @chappjc의 사람들보다 조금 더 빠른 것 같습니다.

S = max(Indices(:));
Result = zeros(S);
Result(bsxfun(@plus, (Indices-1)*S, 1:S)) = Data;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top