3 votes

Comment trouver une valeur dans une matrice

0I ont sur la matrice-

A=[1 2 2 3 5 5;
   1 5 5 8 8 7;
   2 9 9 3 3 5];

A partir de la matrice, je dois compter combien d'éléments non nuls, combien de 1, combien de 2 et combien de 3 dans chaque ligne de la matrice "A" :

    [Ar Ac]=size(A);

    for j=1:Ar 
        for k=1:Ac
            count(:,j)=nnz(A(j,:));
            d(:,j)=sum(A(j,:)== 1); 
            e(:,j)=sum(A(j,:)==2);  
            f(:,j)=sum(A(j,:)==3);          
    end
end

mais j'ai besoin de les écrire en utilisant une boucle, c'est-à-dire qu'ici j'utilise manuellement sum(A(j, :)== 1), sum(A(j, :)== 2) et sum(A(j, :)== 3) mais y a-t-il une option où je peux seulement écrire sum(A(j, :)== 1:3) et stocker toutes les valeurs dans les différentes lignes, c'est-à-dire que le résultat sera comme

b=[1 2 1;
   1 0 0;
   0 1 2];

Les experts de Matlab ont besoin de vos précieuses suggestions

0voto

Mohsen Nosratinia Points 5624

En voici une compacte :

sum(bsxfun(@eq, permute(A, [1 3 2]), 1:3),3)

Vous pouvez remplacer 1:3 avec n'importe quel tableau. vous pouvez créer une fonction anonyme pour cela

rowcnt = @(M, R) sum(bsxfun(@eq, permute(M, [1 3 2]), R),3);

puis l'exécuter sur vos données renvoie

>> rowcnt(A,1:3)

ans =

     1     2     1
     1     0     0
     0     1     2

et pour le cas plus généralisé

>> rowcnt(A,[1 2 5 8])

ans =

     1     2     2     0
     1     0     2     2
     0     1     1     0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X