index example create array accessing arrays matlab microbenchmark

arrays - example - Diferencia entre las funciones de numeración y longitud de MATLAB



matrix of matrix matlab (3)

Como otros dijeron que son lo mismo para una matriz unidimensional.

En mi humilde opinión, la length punto de vista de legibilidad del código debe usarse en arreglos unidimensionales. Se trata de "programación intencional" , ves el código y entiendes lo que el programador tenía en mente al concebir su trabajo. Entonces, cuando veo numel , sé que se usa en una matriz.

length vs. numel fue un tema de discusión en nuestro equipo durante varios años. El antiguo desarrollador senior no se preocupó por la capacidad de código, solo por el trabajo realizado y solo utilizó numel en otro numel que no era muy legible / formateado. Otro tipo es un matemático y usa la length solo en matrices numéricas para matrices "reales". Para matrices de celdas y matrices de estructuras, utilizó numel .

Sé que length(x) devuelve max(size(x)) y numel(x) devuelve la cantidad total de elementos de x, pero ¿cuál es mejor para una matriz de 1 por n? ¿Importa, o son intercambiables en este caso?

EDITAR: solo por patadas:

Parece que son los mismos en cuanto a rendimiento hasta llegar a 100k elementos.


En ese caso, devuelven lo mismo y no hay diferencia. En términos de rendimiento, depende del funcionamiento interno de las matrices en MATLAB. Por ejemplo, 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 (recuperación de tamaños, y luego encontrar el máximo entre ellos). Estoy acostumbrado a usar numel en ese caso, pero aparte del discurso de interpretación (hipotético), diría que son intercambiables.


Para una matriz de 1 por N, son esencialmente lo mismo. 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 la length(M) es 0.