如果条件和while循环独立地运行单元数组的每个单元而没有for循环

时间:2014-05-21 14:01:21

标签: matlab cell

我有一个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)

这不起作用,但我不知道为什么,我不知道会发生什么。尝试将所有第一个值与所有第二个值进行比较。

1 个答案:

答案 0 :(得分:1)

对于您的第一个问题,您可以轻松使用cellfunlogical indexing的组合来生成h

h = cellfun(@numel, x) <= 2;

如果值是,小于或等于2,则<= 2位将返回1,否则返回0。

请注意,forwhile循环really aren't slow,所以您写的内容可能是&#34;足够好&#34;。

编辑:关于你的新编辑问题:除非你能保证每个单元格内每个数组的长度是相同的,否则无法做到这一点。我会假设它是。

如果是这种情况,您只需调用cell2mat将单元格数组转换为矩阵,然后直接比较两列:

A = cell2mat(x);
k = A(:,1) < A(:,2);

如果长度都不同,您可以用零或nan或其他东西填充它们,使它们的长度相同。