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)