2010-03-24 12 views
5

Como ya sabrá, en muchas ocasiones, es necesario marcar algunos elementos de una matriz. Por ejemplo, cuando tenemos una matriz de adyacencia ponderada y nuestro gráfico no está completamente conectado, tenemos que marcar algunos elementos para mostrar que no hay borde entre esos nodos. La pregunta es ¿cómo hacer eso? ¿Es mejor poner NaN o Inf en esos elementos en la matriz? o algo más (como -1)?¿Cuál es la mejor manera de marcar algunos elementos en MATLAB? usando NaN o Inf? ¿o algo mas?

Respuesta

10

Depende completamente del caso. En el ejemplo que dio una buena solución podría ser usar ceros, ya que los bordes están ponderados, y para muchos propósitos, un borde de 0 de peso es equivalente a ningún borde. Eso es cierto si estás haciendo cosas como algoritmos de flujo/corte.

Generalmente al elegir entre NaN e Inf, me gustaría ir con NaN. Inf tiene algunas propiedades puede que no te como un marcador "no válido":

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

Una solución limpia podría ser mantener otra matriz de booleanos, que tiene cierto cuando la conexión es válida, y False en caso contrario. Desperdicia un poco de memoria, pero a menos que tu matriz sea enorme, creo que la legibilidad del código que te dará vale la pena.

+3

NaN también tienen algunas sorpresas: NaN == NaN devuelve false! Entonces, en lugar de utilizar isequal(), se debe usar la función isequalwithnans(). – Mikhail

+4

Es isequalwithequalnans() – Jonas

+2

Tiene perfecto sentido que NaN == NaN es falso. ver por ejemplo: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server. –

Cuestiones relacionadas