listing/enumerating numbers

조회 수: 1 (최근 30일)
cgo
cgo 2015년 11월 10일
편집: Thorsten 2015년 11월 10일
I have the following matrix, named interact:
interact = [1 2;
1 3;
2 1;
2 3;
3 1;
3 4;
4 1]
This matrix means that 1 and 2 interact, 1 and 3 interact, and so on. (just a matrix full of indices.)
Now I want to perform this operation/task.
All that 1 interacts will be added and stored in a matrix. Meaning the interaction between 1 and 2 + interaction between 1 and 3 = interaction of 1.
Similarly, separate matrices for interaction of 2, 3, 4, etc.
How do I do this in matlab?

채택된 답변

Thorsten
Thorsten 2015년 11월 10일
편집: Thorsten 2015년 11월 10일
for val=1:4
iv{val} = interact(ismember(interact(:,1), val), 2);
end

추가 답변 (1개)

Guillaume
Guillaume 2015년 11월 10일
Simply use accumarray:
interact = [1 2; 1 3; 2 1; 2 3; 3 1; 3 4; 4 1];
interactwith = accumarray(interact(:, 1), interact(:, 2), [], @(v) {v})
accumarray uses the subs argument (here your first column) to group together the val argument (here your 2nd column) into a vector which at the end it passes to the fun function argument. Here that function is an anonymous function that just returns the vector as a cell array.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by