Concatenating cells according an external vector
조회 수: 2 (최근 30일)
이전 댓글 표시
I am trying to do some work on simulating particles. We label the particles say 1 to n. In each time frame there is a chance that particle i undergoes more than one collision and I'd like to capture this data in an easy way. I have two vectors A and B, where B is in ascending order. The rule is that the particle whose number is given by B(i) collides with particle A(i).
Typicall example might be
A = [7;3;4;13;20;3;1]
B = [11;11;11;15;15;24;24]
I'd like to find an easy way of being able to draw in the data that tells me which particle hit particle B(i) for each unque B(i). My idea is to creat a cell that concactenates entries of A accoriding to the corrresponding entry of B. But I can't seem to do this.
What I hope to get would be a cell
E = {[7,3,4];[13,20];[3,1]}.
I tried the follwing code but I keep getting that "Index exceeds the number of array elements." error.
m = length(unique(B))
E = cell(1,m)
C = unique(B)
for i=1:m %C(i) is the ith unique entry of B
while B(j) == C(i)
E{i} = cat(2,E{i},A(j));
end
end
댓글 수: 0
채택된 답변
Matt J
2023년 3월 4일
편집: Matt J
2023년 3월 4일
A = [7;3;4;13;20;3;1];
B = [11;11;11;15;15;24;24];
E=splitapply(@(x) {x}, A, findgroups(B));
E{:}
댓글 수: 6
Dyuman Joshi
2023년 3월 4일
편집: Dyuman Joshi
2023년 3월 4일
You mentioned in your question -
"What I hope to get would be a cell"
E = {[7,3,4];[13,20];[3,1]}
Here each cell elements are row vectors not column vectors as they should be as A is a column vector. (which could have been a typo)
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!