0

我无法理解这段代码的作用:

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]

但我仍然很困惑,结果很暗..请解释一下吗?

4

2 回答 2

2

Matlab(和犰狳)代表布尔值0forfalse1(或实际上任何不是0) for true。它们都==在矩阵/向量上定义了一个运算符,该运算符进行组件比较并输出一个布尔矩阵。any正在接受该布尔矩阵并检查是否有任何非零。

犰狳似乎没有any,但它确实提供find了可用于实现的any

!find(X, 1).is_empty()

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

于 2012-02-11T16:53:50.370 回答
0

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

于 2013-08-13T02:50:39.573 回答