Матлаб и любой, трудности в понимании - PullRequest
0 голосов
/ 11 февраля 2012

Я не могу понять, что делает этот код:

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

Я должен перевести его на C ++ с библиотекой Armadillo, у которой нет функции any, поэтому мне было интересно, как это сделатьit.

Я прочитал руководства по 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]

, но я все еще в замешательстве, и результаты темныеЛюбое объяснение, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Matlab (и Armadillo) представляют логические значения как 0 для false и 1 (или на самом деле все, что не 0) для true.Они оба определяют оператор == над матрицами / векторами, который выполняет компонентное сравнение и выводит матрицу логических значений.any принимает эту матрицу логических значений и проверяет, не являются ли они ненулевыми.

Похоже, что Armadillo не имеет any, но предоставляет find, который можно использовать для реализации any:

!find(X, 1).is_empty()

эквивалентен (хотя, возможно, медленнее): он создает вектор не более чем из одного ненулевого элемента (документация для поиска ).Если он пуст, значит, нет ненулевых элементов, поэтому any вернет false.

0 голосов
/ 13 августа 2013

Начиная с версии 3.910, Armadillo имеет функцию any () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...