내가하는 방법을 아는 가장 깨끗한 방법은 데이터와 지수를 기반으로 스파 스 매트릭스를 만드는 것입니다.
[M,N] = size(Indices); indmax = max(Indices(:));
Result = sparse(repmat(1:N,M,1),Indices,Data,indmax,indmax);
바라건대 누군가가 와서 우리에게 더 깨끗한 방법을 보여줍니다.
문제
나는 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;