【问题标题】: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 的美妙之处(适用于任何编程语言)是完全可扩展的。如果您希望它具有某些功能,只需编写一个实现它的小习语即可。如果您经常这样做,您将定制环境以满足您的需求。