【问题标题】:How can I use any() on a multidimensional array?如何在多维数组上使用 any()?
【发布时间】:2010-10-17 03:05:55
【问题描述】:

我正在测试一个任意大、任意维度的逻辑数组,我想知道其中是否有任何一个或多个为真。 any() 一次只能在一个维度上工作,sum() 也是如此。我知道我可以测试维数并重复 any() 直到我得到一个答案,但我想要一种更快、坦率地说、更优雅的方法。

想法?

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

【问题讨论】:

    标签: arrays matlab matrix multidimensional-array any


    【解决方案1】:

    如果您的数据在矩阵 A 中,请尝试以下操作:

    anyAreTrue = any(A(:));
    

    编辑:为了向不熟悉语法的人解释更多,A(:) 使用colon operator 来获取数组的全部内容A,无论尺寸如何,并将它们重塑为单个列向量(大小为 numel(A)-by-1)。只需调用一次ANY 即可对生成的列向量进行操作。

    【讨论】:

      【解决方案2】:

      正如所指出的,正确的解决方案是将结果重塑为向量。然后任何将给出所需的结果。因此,

      任何(A(:))

      给出全局结果,如果任何 numel(A) 元素为真,则为真。你也可以使用

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

      显式使用 reshape 运算符。如果您不希望将矩阵转换为向量以应用任何额外的步骤,那么另一种方法是编写您自己的函数。例如,这是一个可以为您完成的函数:

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

      函数结果 = myany(A)

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

      结果 = 任意(A(:));

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

      将其保存为搜索路径上的 m 文件。 MATLAB 的美妙之处(适用于任何编程语言)是完全可扩展的。如果您希望它具有某些功能,只需编写一个实现它的小习语即可。如果您经常这样做,您将定制环境以满足您的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2023-04-10
        • 2014-06-11
        • 2011-08-13
        • 2011-08-04
        • 1970-01-01
        相关资源
        最近更新 更多