如何在多维数组上使用any()?

时间:2009-04-02 14:10:18

标签: arrays matlab matrix multidimensional-array any

我正在测试一个任意大的,任意大小的逻辑数组,我想知道中是否有任何一个或多个是真的。 any()一次仅适用于单个维度,sum()也是如此。我知道我可以测试尺寸的数量并重复any()直到我得到一个答案,但我想要更快,更坦率,更优雅的方法。

想法?

我正在运行2009a(R17,用旧的说法,我认为)。

2 个答案:

答案 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的优点(适用于任何编程语言)是完全可扩展的。如果你有一些你希望它具有的能力,那就写一点做成功的习语。如果您经常这样做,您将自定义环境以满足您的需求。