Каков наилучший способ пометить некоторые элементы в MATLAB? используя NaN или Inf? или что-то другое? - PullRequest
5 голосов
/ 24 марта 2010

Как вы, возможно, знаете, во многих случаях необходимо пометить некоторые элементы матрицы. Например, когда у нас есть взвешенная матрица смежности и наш граф не полностью связан, мы должны пометить некоторые элементы, чтобы показать, что между этими узлами нет ребра. Вопрос в том, как это сделать? Что лучше поместить NaN или Inf на эти элементы в матрице? или что-то еще (например, -1)?

1 Ответ

10 голосов
/ 24 марта 2010

Это полностью зависит от случая. В приведенном вами примере хорошее решение может заключаться в использовании нулей , поскольку ребра взвешены, и для многих целей ребро с нулевым весом эквивалентно отсутствию ребра. Это правда, если вы делаете такие вещи, как алгоритмы потока / вырезания.

Как правило, при выборе между NaN и Inf я бы выбрал NaN . У Inf есть некоторые свойства, которые вы, возможно, не хотели бы использовать как недействительный маркер:

Inf*(-1) = -Inf
Inf+(-Inf) = NaN
Inf > 10 = True
etc...

Чистым решением может быть другая матрица с логическими значениями , которая имеет True, где соединение является действительным, и False в противном случае. Это тратит немного памяти, но если ваша матрица не огромна, я думаю, что читабельность кода, которую она вам даст, того стоит.

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