How to perfrom indexing on nested cell array ?
조회 수: 15 (최근 30일)
이전 댓글 표시
Hallo, Thanks for reading!
I have a nested cell array S(1x9) >>
{2002x10 cell 1155x10 cell 3867x10 cell 4115x10 cell 5394x10 cell 3613x10 cell 3116x10 cell 1335x10 cell 7159x10 cell }
I used the follwoing code to find out the indices where 'abc' appears in 2nd column of nested cells. The result was as expected. However, my next step is to apply logical indices on each column of nested cells.
idx = cellfun(@(x) ismember(x,'abc'),s{1,i}(:,2))
Therefore, I used the following code and returned with the following error. Can please let me know where am I wrong?
cellfun(@(x) x(:,idx),s{1,1})
The logical indices in position 2 contain a true value outside of the array bounds.
Error in @(x)x(:,idx)
댓글 수: 0
채택된 답변
Jan
2021년 5월 12일
Are you aware that cellfun looks really nice, but that the code runs faster with loops?
In your case you see, that a simple loop would simplify the code in addition. The easier the code, the more reliably it can be debugged.
for k = 1:numel(s)
idx = ismember(s{k}(:, 2), 'abc');
% Or maybe:
% idx = strcmp(s{k}(:, 2), 'abc');
t = s{k}(:, idx);
end
댓글 수: 3
추가 답변 (1개)
Bob Thompson
2021년 5월 12일
Are you sure things are set up the way you intend? Here are some things I've noticed:
1) Your main problem is that you're defining idx with a column (size from 1155 to 7159), but your final call is looking at a row, so you're switching your indices. You only have 10 columns, but idx is sized from 1155 to 7159.
2) Although ismember works, you're going to get a return of a logic array for all elements in the specific column. It might be a bit more concise to call find() to just get the desired indices. This might be a personal preference thing for my coding style.
3) idx looks at specific elements of your top level cell array, but your final call looks only at the first cell. This will cause you problems when you have idx coming from a cell with more columns than s(1,1).
참고 항목
카테고리
Help Center 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!