2 votes

Comment créer une liste d'index basée sur la valeur et un nouveau tableau à partir de celle-ci ? MATLAB

Je voudrais éliminer toutes les colonnes dont la troisième ligne contient des valeurs nulles dans mon ensemble de données.

A titre d'exemple :

original_data = [1 2 3 4 5; 1 2 3 4 5; 0 0 0 1 2] 

Pour les trois premières colonnes (avec des zéros sur la troisième ligne), je voudrais créer un nouveau tableau dans lequel les colonnes avec des zéros sur la troisième ligne sont supprimées pour obtenir le résultat :

new_data = [ 4 5;  4 5; 1 2] 

J'aimerais également obtenir un tableau des indices de colonne des valeurs non nulles dans le tableau d'origine.

Par exemple :

original_indices = [4, 5]

J'ai essayé :

dados_teste = dados_out_15;
dados_p6 = [];
[m,n] = size(dados_teste)
for i = 1:n

    if dados_teste(3:i) == 0;
        dados_p6 = dados_teste(:,i)
    else
        dados_p6 = dados_teste(:,n)
    end
end

Mais il est clair que cela ne fonctionne pas...

2voto

MichaelTr7 Points 4519

J'appliquerais le trouver() pour trouver tous les indices non nuls, puis appliquer l'indexation matricielle pour générer un nouveau tableau qui ne contient que les colonnes correspondant aux indices non nuls de la troisième ligne.

Sample_Array = [20 30 40 50; 30 20 70 90; 0 2 1 2];

%Grabbing the third row of the matrix%
Third_Row = Sample_Array(3,:);

%Finding all the non-zero indices%
[Non_Zero_Indices] = find(Third_Row);

%Using matrix indices to generate a new array based on the non-zero
%indicies%
New_Matrix = Sample_Array(:,Non_Zero_Indices);

%Printing matrices% 
Sample_Array

New_Matrix

Non_Zero_Indices

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