假设我有一个单元格数组,它包含一堆逻辑矩阵,例如
matrices =
[225x400 logical]
[225x400 logical]
....
[225x400 logical]
单元阵列可以容纳数百个矩阵。
我想计算一个单矩阵,它是在这个矩阵上连接二进制运算的结果。
即。
result = matrices{1} & matrices{2} & matrices{3} & ..., etc.
我的问题:是否可以在不循环的情况下执行此操作?如果是这样,向量化这个计算MATLAB有什么好处吗?
如果矩阵堆栈表示为3D数组(而不是单元数组?),例如:
Name Size
matrices 225x400x100
将这些类型的堆栈作为单元阵列与3D矩阵相比有什么好处? (为了澄清,在最后一个示例中,我们将计算AND
个100
矩阵,每个矩阵的大小为225x400
}。
PS:我对AND
,XOR
和OR
答案 0 :(得分:4)
您无法对单元阵列进行矢量化计算。您必须将其转换为3D数组(使用cell2mat
),甚至更好:预先分配3D数组。
然后,尺寸为225x400x100,您可以这样做:
或:
any(matrices,3)
和
all(matrices,3)
XOR:
mod( sum(matrices, 3), 2)
单元阵列的好处是内存保留(例如,删除单元格后)。一旦你的单元阵列稳定,你应该将它变成一个用于矢量化计算的矩阵,这比Matlab循环要快得多。