Différence entre les fonctions numel et length de MATLAB

je sais que length(x) retourne max(size(x)) et numel(x) renvoie le nombre total d'éléments de x, mais lequel est le meilleur pour un tableau 1 par n? Importe-t-il, ou sont-ils interchangeables dans ce cas?

EDIT: Juste pour le plaisir:

alt text

on dirait qu'ils sont la même performance-sage jusqu'à ce que vous obtenez à 100k éléments.

38
demandé sur Jonas Stein 2010-06-25 20:33:13

3 réponses

dans ce cas, ils retournent le même et il n'y a pas de différence. En termes de performance, cela dépend du fonctionnement interne des matrices dans MATLAB. Par exemple: s'il y a des méta-informations sur le nombre d'éléments dans le tableau (peu importe la forme), alors numel est aussi rapide que possible, alors que max(size(x)) semble avoir besoin de plus de travail pour obtenir la même chose (retrouver les tailles, puis trouver le max parmi celles-ci). Je suis habitué à utiliser numel dans ce cas, mais le discours de performance (hypothétique) à part, je dirais qu'ils sont interchangeables.

18
répondu ShinTakezou 2010-06-25 16:44:37

pour un tableau 1-by-N, ils sont essentiellement les mêmes. Pour un tableau multidimensionnel M, ils peuvent donner des résultats différents:

  • numel(M) est équivalent à prod(size(M)).
  • length(M) est équivalent à max(size(M)). Si M est vide (n'importe quelle dimension est 0), puis length(M) est 0.
18
répondu gnovice 2017-11-15 05:00:58

comme les autres ont dit, ils sont les mêmes pour un tableau unidimensionnel.

IMHO du point de vue de la lisibilité du code length doit être utilisé sur des tableaux unidimensionnels. C'est sur "intentionnelle de la programmation", vous voyez le code et comprenez ce que programmeur avait à l'esprit lors de la conception de son travail. Alors quand je vois numel je sais qu'il est utilisé sur une matrice.

length vs. numel a été un sujet de discussion dans notre équipe pendant un certain nombre d'années. L'ex-développeur principal ne s'en est pas soucié au sujet de la réabilité du code, seulement au sujet du travail effectué et utilisé seulement numel en code par ailleurs difficilement lisible/formaté. L'autre type est un matématicien et utilisé length seulement sur les tableaux numériques étant pour lui des tableaux "réels". Pour les matrices de cellules et les matrices de structures, il a utilisé numel.

8
répondu Mikhail 2010-06-28 21:13:46