0

将多维数组中的元素条件减少为 Matlab 中的一个逻辑变量的最优雅方法是什么?对于一个有很多 if 条件和断言的大型项目,我需要这个。在关于逻辑数组查找数组元素的 Matlab 文档中,对于这个问题没有令人满意的解决方案。

例如,myBool如果矩阵中的同一位置有两个,则逻辑变量为真AB

A = [0,1;0,0]
B = [0,1;1,0]

到目前为止,我首选的解决方案是:

myBool = any(A(:)==1 & B(:)==1)

但它看起来不是最短的解决方案,并且不适用于数组索引。

一个较短但可读性不强的解决方案:

myBool = any(A(B==1))

最大的问题是,对于高维数组,像 nnz() 这样的函数在没有冒号 (:) 的情况下只能将顺序减少一维,但是使用冒号就不可能索引数组的一部分......

4

1 回答 1

1

首先,如果您使用 class 的矩阵logical,那么您不需要测试与 的相等性1

除了索引,最好的方法是:

bFlag = any(A(:) & B(:));

如果你需要索引,你有两个选择。您可以使用一个小的矢量化匿名函数:

fhVec = @(T)(T(:));
bFlag = any(fhVec(A(rowIndices, colIndices) & B(rowIndices, colIndices)));

或者,您可以使用线性索引:

vnLinearIndices = sub2ind(size(A), rowIndices, colIndices);
bFlag = any(A(vnLinearIndices) & B(vnLinearIndices));
于 2014-09-23T13:48:57.430 回答