Matlab和任何,理解困难

Matlab and any, difficulties in understanding

本文关键字:任何 Matlab      更新时间:2023-10-16

我不明白这个代码的作用:

if any(scale==0)
   loglik = -inf;

我必须用Armadillo库将其翻译成C++,该库没有any函数,所以我想知道如何做到这一点。

我已经阅读了matlab手册,但它仍然令人困惑。然后我尝试了这个测试用例:

if any([*]==0)
   1
else
   0
end

使用这些值(以及更多):

[0 0;0 0]
[1 0;0 0]
[1 0;1 0]
[1 0;0 1]
[1 1;1 1]

但我仍然很困惑,结果很糟糕。。有什么解释吗?

Matlab(和Armadillo)将布尔表示为false0true1(或者实际上不是0的任何东西)。它们都在矩阵/向量上定义了一个==算子,该算子进行分量比较并输出布尔矩阵。any正在获取布尔值矩阵,并检查是否有布尔值为非零。

Armadillo似乎没有any,但它提供了find,可用于实现any:

!find(X, 1).is_empty()

是等价的(尽管可能更慢):它构造了一个最多包含一个非零元素的向量(find的文档)。如果它为空,则不存在非零元素,因此any将返回false。

从3.910版本开始,Armadillo具有any()函数。