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:
on dirait qu'ils sont la même performance-sage jusqu'à ce que vous obtenez à 100k éléments.
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.
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:
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
.