我正在测试一个任意大的,任意大小的逻辑数组,我想知道中是否有任何一个或多个是真的。 any()
一次仅适用于单个维度,sum()
也是如此。我知道我可以测试尺寸的数量并重复any()
直到我得到一个答案,但我想要更快,更坦率,更优雅的方法。
想法?
我正在运行2009a(R17,用旧的说法,我认为)。
答案 0 :(得分:10)
如果您的数据位于 A 矩阵中,请尝试以下操作:
anyAreTrue = any(A(:));
编辑:要为不熟悉语法的人解释一下, A(:)使用colon operator来获取整个内容数组 A ,无论尺寸如何,并将它们重新整形为单个列向量(大小为numberl(A)-by-1)。对结果列向量进行操作只需要调用ANY。
答案 1 :(得分:2)
正如所指出的,正确的解决方案是将结果重塑为矢量。然后任何人都会得到理想的结果。因此,
任何(A(:))
给出全局结果,如果任何numel(A)元素为真,则为true。您也可以使用
任何(重塑(A,[],1))
显式使用reshape运算符。如果您不希望执行将矩阵转换为向量以应用任何向量的额外步骤,那么另一种方法是编写自己的函数。例如,这是一个可以为你做的功能:
======================
功能结果= myany(A)
%确定A中的任何元素是否为非零
result = any(A(:));
======================
将其另存为搜索路径上的m文件。 MATLAB的优点(适用于任何编程语言)是完全可扩展的。如果你有一些你希望它具有的能力,那就写一点做成功的习语。如果您经常这样做,您将自定义环境以满足您的需求。