0

このコードが何をするのか理解できません:

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

Armadillo ライブラリで C++ に変換する必要がありますが、anyこれには機能がないため、どうすればよいか考えていました。

私はmatlab manualsを読みましたが、まだ混乱しています。次に、このテストケースで試しました:

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

as * これらの値 (およびその他の値) を使用:

[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(およびArmadillo)は、のブール値と0(または実際にはそうでないもの)を表します。これらは両方とも、コンポーネントごとの比較を行い、ブール値の行列を出力する行列/ベクトルに対する演算子を定義します。ブール値のその行列を取り込んで、ゼロ以外のものがあるかどうかをチェックしています。false10true==any

Armadilloにはがないように見えますが、実装に使用できるanyものは提供されています。findany

!find(X, 1).is_empty()

同等です(おそらく遅くなりますが):最大で1つの非ゼロ要素のベクトルを構築します(findのドキュメント)。空の場合、ゼロ以外の要素はないため、anyfalseを返します。

于 2012-02-11T16:53:50.370 に答える
0

バージョン 3.910 から、Armadillo にはany()関数が追加されました。

于 2013-08-13T02:50:39.573 に答える