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

7 Ansichten (letzte 30 Tage)
Cantor Set
Cantor Set am 11 Sep. 2021
Kommentiert: Chunru am 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

Antworten (2)

Chunru
Chunru am 11 Sep. 2021
Bearbeitet: Chunru am 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 Kommentare
TADA
TADA am 14 Sep. 2021
this removes the lines that correspond to the indices in idx
Chunru
Chunru am 15 Sep. 2021
@Chad Greene You don't have to replicate y (matlab does auto array expansion).

Melden Sie sich an, um zu kommentieren.


TADA
TADA am 11 Sep. 2021
A = [magic(5); magic(5)];
v = A(1,:);
mask = A==v;
eqRows = all(mask, 2);
A(eqRows, :) = [];

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by