从Matlab中的多维数组中的几个Elementwise-Conditions中提取一个Logical变量

时间:2014-09-23 13:41:41

标签: arrays matlab multidimensional-array logical-operators multiple-conditions

在Matlab中将多维数组中的元素条件减少到一个逻辑变量的最优雅方法是什么?我需要这个用于一个包含大量if条件和断言的大项目。在Matlab文档about logical arraysfind array elements中,没有针对此问题的满意解决方案。

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

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

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

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

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

更短但不易读的解决方案:

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

最大的问题是,对于更高维数组,像nnz()这样的函数只会在不使用冒号(:)的情况下将顺序减少一个维度,但是使用冒号则无法索引数组的一部分...

1 个答案:

答案 0 :(得分:1)

首先,如果你使用类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));