What is the easiest way to remove a vector from a matrix?

7 vues (au cours des 30 derniers jours)
Cantor Set le 11 Sep 2021
Commenté : Chunru le 15 Sep 2021
Suppose there is a Loop A which returns a row vector y of the same number of columns such as matrix Q.
I want to remove all the occurrences of the row vectors y from Q, is their a simple way to do it (I am trying to avoid loops).
Here is a loop I wrote:
for i=1:size(Q,1)
s=eq(Q(i,:),y); r=all(s);
if r==1
Q(i,:)=[];
end
end
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Réponses (2)

Chunru le 11 Sep 2021
Modifié(e) : Chunru le 11 Sep 2021
a = magic(4);
a = [a; a(1, :); a]; % 1st 5th and 6th rows are the same
a
a = 9×4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 16 2 3 13 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
y = a(1, :); % the vector input
idx = all(a == y, 2);
a(idx, :)=[]
a = 6×4
5 11 10 8 9 7 6 12 4 14 15 1 5 11 10 8 9 7 6 12 4 14 15 1
% in a line
% a(all(a==y, 2), :) =[]
4 commentairesAfficher 2 commentaires plus anciensMasquer 2 commentaires plus anciens
this removes the lines that correspond to the indices in idx
Chunru le 15 Sep 2021
@Chad Greene You don't have to replicate y (matlab does auto array expansion).

Connectez-vous pour commenter.

A = [magic(5); magic(5)];
v = A(1,:);
A(eqRows, :) = [];
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by