Quels sont les moyens à la somme des éléments de la matrice dans MATLAB?
Compte tenu de la matrice:
A = [1 2 3; 4 5 6; 7 8 9];
- Comment pourriez-vous utiliser une boucle for pour calculer la somme des éléments de la matrice?
- Écrire une seule ligne de commande MATLAB à l'aide de la fonction
sum
de la somme
les éléments de matrice dansA
.
Ma réponse:
1)
for j=1:3,
for i=j:3,
A(i,:) = A(i,:)+A(j+1,:)+A(j+2,:)
end
end
2)
sum(A)
Ce sont les réponses exactes? Je ne savais pas comment utiliser if
, while
et for
. Quelqu'un peut-il m'expliquer?
Ce sont vraiment des questions simples. Quelques minutes sur Google avec l'un des innombrables tutoriels aurait sauvé le reste d'entre nous beaucoup de temps.
Essayez d'éviter d'utiliser pour des boucles pour le calcul des trucs dans Matlab. Sauf si vous voulez vraiment faire des choses vraiment lent ou il n'y a pas d'autre moyen.
Essayez d'éviter d'utiliser pour des boucles pour le calcul des trucs dans Matlab. Sauf si vous voulez vraiment faire des choses vraiment lent ou il n'y a pas d'autre moyen.
OriginalL'auteur izzat | 2009-11-12
Vous devez vous connecter pour publier un commentaire.
Pour les très grandes matrices à l'aide de
sum(sum(A))
peut être plus rapide quesum(A(:))
:rand(100)
la différence est significative sur mon système. (Mais pas pourrand(10000,1)
). Cependant, comme il s'agit d'une fraction de seconde, je voudrais encore vous recommandons la plus robuste/généralsum(A(:))
pour la plupart des besoins.Jaheruddin je préfère
sum(sum(A))
car il est plus efficaces de calcul. Le seul avantage desum(A(:))
est qu'il est plus facile à lire, mais il peut réencoder l'ensemble de la matrice A en un vecteur, donc l'effort de calcul.Bien sûr, il est moins efficace (comme indiqué dans la réponse), mais en fait la principale raison pour laquelle je l'utilise, c'est qu'il fonctionne pour les matrices de la plus haute dimensionnalité. Supposons que vous avez
M=rand(3,3,3)
, maintenant comparersum(sum(M)))
avecsum(M(:))
.Mise à jour: à l'aide de Matlab 2015b, la différence est d'environ un ordre de grandeur plus faible (0.193 sec. v. 0.185 sec.).
timeit(@()sum(sum(A)))/timeit(@()sum(A(:)))
est plus précis quetic
ettoc
.OriginalL'auteur Mohsen Nosratinia
1)
2)
Alors qu'une bonne réponse, j'espère voir le plus ed réponse à décourager les boucles. Ils ne sont en effet conduire à ralentir les horribles morts... Peut-être modifier?
OriginalL'auteur merv
Une autre réponse pour la première question consiste à utiliser un pour la boucle et effectuer linéaire de l'indexation dans le tableau à l'aide de la fonction NUMEL pour obtenir le nombre total d'éléments:
OriginalL'auteur gnovice
Éviter pour les boucles à chaque fois que possible.
est super mais si vous avez une certaine logique d'indexation de passe vous ne pouvez pas utiliser la (:), mais vous pouvez écrire
Puisque la somme des montants des colonnes et des sommes que le vecteur ligne qui a été créé par la première somme. Notez que cela ne fonctionne que si la matrice est 2-dim.
OriginalL'auteur Reed Richards
La meilleure pratique est certainement pour éviter des boucles ou des récurrences dans Matlab.
Entre
sum(A(:))
etsum(sum(A))
.Dans mon expérience, les tableaux dans Matlab semble être stockées dans un bloc continu dans la mémoire sous forme de vecteurs colonnes. De sorte que la forme de l'Un n'a pas assez de matière dans
sum()
. (On peut testerreshape()
et de vérifier si le remodelage est rapide dans Matlab. Si c'est le cas, alors nous avons une raison de croire que la forme d'un tableau n'est pas directement liée à la façon dont les données sont stockées et manipulées.)En tant que tel, il n'y a pas de raison
sum(sum(A))
devrait être plus rapide. Il serait plus lent si Matlab crée en fait un vecteur ligne de l'enregistrement de la somme de chaque colonne d'Une première, puis de la somme sur les colonnes. Mais je pense quesum(sum(A))
est très répandue parmi les utilisateurs. Il est probable qu'ils en dur codesum(sum(A))
être une boucle unique, le même poursum(A(:))
.Ci-dessous je vous offre quelques résultats de tests. Dans chaque test, A=rand(taille) et la taille est spécifiée dans les textes affichés.
Première est l'utilisation de tic toc.
Ci-dessous à l'aide de cputime
Dans mon expérience, les deux compteurs sont valables jusqu'à .1s. Donc, si vous avez une expérience similaire avec Matlab minuteries, aucun de ces tests ne peuvent discerner
sum(A(:))
etsum(sum(A))
.J'ai essayé la taille maximale autorisée sur mon ordinateur un peu plus de temps.
Ils semblent équivalentes.
Soit on est bon. Mais
sum(sum(A))
exige de connaître la dimension de votre tableau est 2.La première est une comparaison par rapport à
sum(sum(A))
, mais tous les autres sont contre seulementsum(A)
...OriginalL'auteur Argyll
Vous essayez de résumer tous les éléments de la 2-D de la Matrice de
Dans Matlab utilisation
Array_Sum = sum(sum(Array_Name));
OriginalL'auteur Riz