2011-10-10 66 views
3

假设我有一个单元数组,它包含一堆逻辑矩阵,例如,向量化二元运算的连接

matrices = 
    [225x400 logical] 
    [225x400 logical] 
    .... 
    [225x400 logical] 

单元格数组可能有数百个矩阵。

我想计算一个单一的矩阵,这是在这个矩阵上的二进制运算的串联结果。

result = matrices{1} & matrices{2} & matrices{3} & ..., etc. 

我的问题:是否有可能做到这一点没有循环?如果是这样,矢量化这个计算MATLAB有什么好处吗?

如果什么矩阵的堆叠被表示为一个三维阵列,例如(而不是一个单元阵列):

Name      Size     

    matrices     225x400x100 

是否有在保持这些类型的堆叠的作为单元阵列VS 3D矩阵的任何益处? (为了澄清,在这最后一个例子中,我们将计算AND100矩阵,其中每个矩阵的大小为225x400)。

PS:我感兴趣的解决方案,以ANDXOROR

回答

4

你不能做对电池阵列矢量计算。您必须将其转换为3D阵列(使用cell2mat),或者甚至更好:预先分配3D阵列。

然后,尺寸225x400x100,你可以这样做:

或:

any(matrices,3) 

和:

all(matrices,3) 

XOR:

mod(sum(matrices, 3), 2) 

电池阵列的好处是记忆保存(例如,一旦你删除了一个单元格)。一旦你的单元阵列稳定,你应该把它变成一个向量化计算的矩阵,这比Matlab循环要快得多。

+0

这很好。谢谢! –

+2

将cellarray转换为3D矩阵,使用以下命令:'cat(3,matrices {:})' – Amro