3

我正在测试一个任意大、任意维度的逻辑数组,我想知道其中是否有一个或多个是正确的。any()一次只适用于一个维度,sum(). 我知道我可以测试维度的数量并重复any(),直到我得到一个答案,但我想要一种更快、坦率地说、更优雅的方法。

想法?

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

4

2 回答 2

10

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

anyAreTrue = any(A(:));

编辑:为了向不熟悉语法的人解释更多,A(:)使用冒号运算符获取数组A的全部内容,无论维度如何,并将它们重塑为单个列向量(大小数字(A)-by-1)。只需一次调用ANY即可对结果列向量进行操作。

于 2009-04-02T14:14:50.193 回答
2

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

任何(A(:))

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

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

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

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

函数结果 = myany(A)

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

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

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

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

于 2009-04-02T15:58:08.393 回答