2010-06-25 27 views
35

Sé que length(x) devuelve max(size(x)) y numel(x) devuelve el número total de elementos de x, pero ¿cuál es mejor para una matriz de 1 por n? ¿Importa, o son intercambiables en este caso?Diferencia entre las funciones numel y longitud de MATLAB

EDIT: Sólo por diversión:

alt text

Parece que son la misma en cuanto al rendimiento hasta llegar a 100 mil elementos.

Respuesta

17

En ese caso, devuelven el mismo y no hay ninguna diferencia. En términos de rendimiento, depende del funcionamiento interno de las matrices en MATLAB. P.ej. si hay metainformaciones sobre cuántos elementos hay en la matriz (sin importar la forma), entonces numel es lo más rápido posible, mientras que max (tamaño (x)) parece necesitar más trabajo para obtener lo mismo (recuperar tamaños, y luego encontrando el máximo entre ellos). Estoy acostumbrado a usar numel en ese caso, pero el discurso de rendimiento (hipotético) aparte, diría que son intercambiables.

+3

Tienes razón en la parte del rendimiento. Acabo de ejecutar 100 iteraciones de numel vs longitud en x = 1: 100000000 y numel fue en promedio 3.0919 veces más rápido. Sin embargo, no debería importar mucho para arreglos más pequeños. – Doresoom

+0

... y ahora estoy realmente curioso sobre el rendimiento de numel/length frente al tamaño de la matriz. – Doresoom

+7

¡LENGTH nunca será el cuello de botella de rendimiento en su programa! Solo las mejoras de rendimiento reales importan. Para todos los demás casos, la legibilidad del código es importante. – Mikhail

16

Para una matriz de 1 por N, son esencialmente iguales. Para una matriz multidimensional M, pueden dar resultados diferentes:

  • numel(M) es equivalente a prod(size(M)).
  • length(M) es equivalente a max(size(M)). Si M está vacío (es decir, cualquier dimensión es 0), entonces length(M) es 0.
+4

Tenga en cuenta que si x = unos (0, n); luego max (size (x)) -> n while length (x) -> 0 –

6

Como otros dicen que son los mismos para una matriz unidimensional.

En mi humilde opinión desde el punto de vista de legibilidad del código length se debe utilizar en matrices unidimensionales. Se trata de "intentional programming", puede ver el código y comprender lo que el programador tenía en mente al concebir su trabajo. Entonces cuando veo numel sé que se usa en una matriz.

length contra numel fue un tema de debate en nuestro equipo durante varios años. El antiguo desarrollador principal no se preocupó por la capacidad de código, solo por el trabajo realizado y solo se usó numel en un código que, por lo demás, no se podía leer/formatear. Other guy es un matemático y usó length solo en matrices numéricas para matrices "reales". Para arreglos de celdas y matrices de estructuras, usó numel.

+2

Buena perspectiva: mayor legibilidad en un minuto/aumento insignificante en el rendimiento.+1 – Doresoom

+7

Cuando veo que se usa NUMEL, no asumo que se está usando en una matriz en comparación con un vector, simplemente asumo que se está utilizando en un objeto cuyas dimensiones no son importantes y solo el * número * de elementos asuntos. – gnovice

+0

¡Importa cuando va a refactorizar ese código y no sabe a primera vista si es un vector o una matriz! – Mikhail

Cuestiones relacionadas