Avoid loop for equality
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a variable
h = 2:2:8
I want to have 4 output variables depending on the 4 differnt h
A = y(s==h(1),:)
As you can see if I have it like this I need to do it 4 times for each h. Is there a possibility to do it like this in one step?
[A1, A2, A3, A4] = y(s==h,:)
댓글 수: 6
Rik
2018년 7월 3일
Despite your edit, this is still not a MWE. We don't have y or s, so we still cannot run this. I would also agree with Guillaume that it is a bad idea to number variables: writing A{1} A{2} A{3} instead of A1 A2 A3 will allow you to easily loop over all elements.
답변 (1개)
Guillaume
2018년 7월 3일
Do not number variables. Creating variables A1, A2, ... is a bad idea, it will make for slow, hard to understand and difficult to debug code. If you start numbering variables it means that they're somehow related and would be better stored together in a single container that you can index easily.
It turns out you already have such a container, your y and you're probably better off keeping it as is. If you really need to you can split y into a cell array according to s but it's probably going to make subsequent calculations harder rather than easier:
[~, ~, rowid] = unique(s);
splity = accumarray(rowid, (1:numel(s))', [], {@(rid) y(rid, :)})
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!