假设我有一个元胞数组,它包含一堆逻辑矩阵,例如
matrices =
[225x400 logical]
[225x400 logical]
....
[225x400 logical]
元胞数组可能包含数百个矩阵。
我想计算一个矩阵,它是对该矩阵进行二元运算串联的结果。
即
result = matrices{1} & matrices{2} & matrices{3} & ..., etc.
我的问题:是否可以在不循环的情况下执行此操作?如果是这样,将此计算 MATLAB 向量化有什么好处吗?
如果矩阵堆栈表示为 3D 数组(而不是元胞数组?),例如:
Name Size
matrices 225x400x100
将这些类型的堆栈保存为元胞数组与 3D 矩阵相比有什么好处吗? (澄清一下,在最后一个示例中,我们将计算 100
矩阵的 AND
,每个矩阵的大小为 225x400
)。
PS:我对AND
、XOR
和OR
的解决方案很感兴趣
最佳答案
您不能对元胞数组进行矢量化计算。您必须将其转换为 3D 数组(使用 cell2mat
),或者更好:预先分配一个 3D 数组。
然后,对于 225x400x100 的尺寸,您可以:
或:
any(matrices,3)
和:
all(matrices,3)
异或:
mod( sum(matrices, 3), 2)
元胞数组的好处是内存保存(例如,一旦您删除了一个元胞)。元胞数组稳定后,您应该将其转换为用于矢量化计算的矩阵,这比 Matlab 循环快得多。
关于matlab - 向量化二元运算的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719248/