Logical Indexing of Cell Array containing matrices
2 次查看(过去 30 天)
显示 更早的评论
Hi everyone,
I need help with indexing cell arrays. I have a cell array, which contains matrices in the first, a string in the second and three identifiers in the third-fifth columns (see attached screenshot)

. What I want to do is a plot of specific values, which are located in the matrix of the first column and want to access those values with logical indexing of the identifiers. As a matter of fact, my logical indexing fails, it is not as straight forward as for standard arrays.
See my code below:
plot(R1{(R1{:,3} == phi && R1{:,4} == layer && R1{:,5} == speed),1}(:,6), ...
R1{(R1{:,3} == phi && R1{:,4} == layer && R1{:,5} == speed),1}(:,3),'Color',color(1,:),'LineStyle','-','LineWidth',1)
I have already tried the solutions with strcmp, but this doesn't work either...
Thanks for your help in advance! Georg
3 个评论
采纳的回答
Walter Roberson
2016-11-7
mask = cell2mat(R1(:,3)) == phi & cell2mat(R1(:,4) == layer & cell2mat(R1(:,5)) == speed);
subset = R1(mask,:);
plot(subset{1, 1}(:,6), subset{1, 1}(:,3), 'Color', color(1,:), 'LineStyle', '-', 'LineWidth', 1);
hold on
arrayfun(@(ROWIDX) plot(subset{ROWIDX, 1}(:,6), subset{ROWIDX, 1}(:,3), 'Color', color(1,:), 'LineStyle', '-', 'LineWidth', 1), 2:size(subset,1));
If you already have "hold on" in effect then you can use
mask = cell2mat(R1(:,3)) == phi & cell2mat(R1(:,4) == layer & cell2mat(R1(:,5)) == speed);
subset = R1(mask,:);
arrayfun(@(ROWIDX) plot(subset{ROWIDX, 1}(:,6), subset{ROWIDX, 1}(:,3), 'Color', color(1,:), 'LineStyle', '-', 'LineWidth', 1), 1:size(subset,1));
2 个评论
Walter Roberson
2016-11-8
arrayfun is there to plot all the subsets. Each subset member is one row in which the condition was true.
I do not assume that only one line matches the criteria.
更多回答(1 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!