矢量化二进制操作的串联

时间:2011-10-10 22:09:00

标签: matlab matrix vectorization logical-operators

假设我有一个单元格数组,它包含一堆逻辑矩阵,例如

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

单元阵列可以容纳数百个矩阵。

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

即。

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

我的问题:是否可以在不循环的情况下执行此操作?如果是这样,向量化这个计算MATLAB有什么好处吗?

如果矩阵堆栈表示为3D数组(而不是单元数组?),例如:

  Name                        Size                  

  matrices                  225x400x100

将这些类型的堆栈作为单元阵列与3D矩阵相比有什么好处? (为了澄清,在最后一个示例中,我们将计算AND100矩阵,每个矩阵的大小为225x400}。

PS:我对ANDXOROR

的解决方案感兴趣

1 个答案:

答案 0 :(得分:4)

您无法对单元阵列进行矢量化计算。您必须将其转换为3D数组(使用cell2mat),甚至更好:预先分配3D数组。

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

或:

any(matrices,3)

all(matrices,3)

XOR:

mod( sum(matrices, 3), 2)

单元阵列的好处是内存保留(例如,删除单元格后)。一旦你的单元阵列稳定,你应该将它变成一个用于矢量化计算的矩阵,这比Matlab循环要快得多。