我有一个1x10(比如10,因为它实际上是262144,但出于我的问题的目的,10就足够了)单元格数组称为x。每个单元格都是0到4个实数值的数组。
我希望根据每个单元格中的元素数运行if条件,不使用for循环(正如我所说,它实际上是262144单元格长,所以for循环可能有点重)。
for循环例子显示我想要做的事情:
for i = 1:10
if numel(x{i}) > 2
h(i) = 0;
else
h(i) = 1;
end
end
然后我想在每个单元格上独立运行while循环,将h递增1直到达到单元格的长度值。
len = cellfun(@numel,x)
while h < len
h = h+1;
%code that does thing on each cell still in the while loop
end
即使我看起来非常透彻,我也从未在网上看过这样的内容。如果有人能给我一个关于如何在不使用for循环的情况下独立工作的全局指示(这是我的问题的核心),我会很棒!
编辑:知道如何操作所有单元格的X值也会很棒。 E.g:
k = x{:}(1) < x{:}(2)
这不起作用,但我不知道为什么,我不知道会发生什么。尝试将所有第一个值与所有第二个值进行比较。
答案 0 :(得分:1)
对于您的第一个问题,您可以轻松使用cellfun
和logical indexing的组合来生成h
:
h = cellfun(@numel, x) <= 2;
如果值是,小于或等于2,则<= 2
位将返回1,否则返回0。
请注意,for
和while
循环really aren't slow,所以您写的内容可能是&#34;足够好&#34;。
编辑:关于你的新编辑问题:除非你能保证每个单元格内每个数组的长度是相同的,否则无法做到这一点。我会假设它是。
如果是这种情况,您只需调用cell2mat
将单元格数组转换为矩阵,然后直接比较两列:
A = cell2mat(x);
k = A(:,1) < A(:,2);
如果长度都不同,您可以用零或nan
或其他东西填充它们,使它们的长度相同。