代码之家  ›  专栏  ›  技术社区  ›  Marc

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

  •  3
  • Marc  · 技术社区  · 17 年前

    我正在测试一个任意大的任意尺寸的逻辑数组,我想知道 任何一个或多个 他们中的一个是真的。 any() 一次只能在一个维度上工作,就像这样 sum() . 我知道我可以测试尺寸的数量,然后重复 任意() 直到我得到一个单一的答案,但我想要一个更快,坦率,更优雅的方法。

    思想?

    我在运行2009a(我想用旧的说法是R17)。

    2 回复  |  直到 9 年前
        1
  •  10
  •   gnovice    17 年前

    如果数据在矩阵中 试试这个:

    anyAreTrue = any(A(:));
    

    编辑: 为不熟悉语法的人解释更多, A(:) 使用 colon operator 获取数组的全部内容 ,无论尺寸大小如何,并将其重新整形为单列向量(大小为numel(a)-x-1)。只有一个电话 ANY 需要对生成的列向量进行操作。

        2
  •  2
  •   user85109    17 年前

    正如所指出的,正确的解决方案是将结果整形为向量。然后任何一个都会给出所需的结果。因此,

    任何(A:)

    给出全局结果,如果numel(a)元素中的任何一个为真,则为真。你也可以用

    任意(重塑(A,[],1))

    它显式使用reform运算符。如果您不想做额外的步骤,将矩阵转换成向量来应用任何向量,那么另一种方法是编写自己的函数。例如,这里有一个函数可以为您执行此操作:

    ============

    函数结果=myany(a)

    %确定a中的任何元素是否为非零

    结果=任意(a(:);

    ============

    在搜索路径中将此文件保存为m文件。Matlab(适用于任何编程语言)的优点在于它是完全可扩展的。如果您希望它具有某种功能,只需编写一个小成语即可。如果您经常这样做,那么您将定制适合您需要的环境。