Matlab 矢量化二进制操作的串联

Matlab 矢量化二进制操作的串联,matlab,matrix,vectorization,logical-operators,Matlab,Matrix,Vectorization,Logical Operators,假设我有一个单元数组,它包含一堆逻辑矩阵,例如 matrices = [225x400 logical] [225x400 logical] .... [225x400 logical] 单元阵列可能容纳数百个矩阵 我想计算一个单独的矩阵,它是这个矩阵上二进制操作串联的结果 i、 e 我的问题:是否可以在不循环的情况下执行此操作?如果是的话,矢量化这个计算有什么好处吗 如果矩阵堆栈表示为3D数组(而不是单元格数组),例如: 将这些类型的堆栈作为单元阵列与3D矩

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

matrices = 
    [225x400 logical]
    [225x400 logical]
    ....
    [225x400 logical]
单元阵列可能容纳数百个矩阵

我想计算一个单独的矩阵,它是这个矩阵上二进制操作串联的结果

i、 e

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

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

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


PS:我对
XOR
的解决方案感兴趣。你不能在单元数组上进行矢量化计算。您必须将其转换为3D阵列(使用
cell2mat
),或者更好:预先分配3D阵列

然后,对于尺寸225x400x100,您可以执行以下操作:

或:

以及:

异或:


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

要将光线转换成3D矩阵,请使用以下命令:
cat(3,矩阵{:})
result = matrices{1} & matrices{2} & matrices{3} & ..., etc.
  Name                        Size                  

  matrices                  225x400x100
any(matrices,3)
all(matrices,3)
mod( sum(matrices, 3), 2)