Excluding one vector from another vector with repetition

7 visualizaciones (últimos 30 días)
Sarah Ansari
Sarah Ansari el 18 de Jun. de 2018
Comentada: Bruno Luong el 9 de Dic. de 2020
I want to get a new vector that has elements of S excluding the values in C with repetition.
S=[1 3 0 2 0 0] C=[0 2] B=setdiff(S,C) B=[1 3] while I need the output as [1 3 0 0]. I need the other zeros in the output but setdiff removes all the zeros. I also tried ismember function and it has the same result.
B=S(~ismember(S,C)) B=[1 3]
To make it clearer, I need to exclude a from s with repetition while keeping the same order of elements in s.

Respuesta aceptada

Paolo
Paolo el 18 de Jun. de 2018
S=[1 3 0 2 0 0];
C=[0 2];
[~,col] = ismember(C,S);
S(col) = [];
S =
1 3 0 0
  7 comentarios
Jan
Jan el 9 de Dic. de 2020
Please open a new thread, because this is a different question. Include some examples, which clarify uniquely, which outputs are wanted for which input.
Bruno Luong
Bruno Luong el 9 de Dic. de 2020
Paolo's solution breaks if C contains elements not in S.

Iniciar sesión para comentar.

Más respuestas (1)

Bruno Luong
Bruno Luong el 9 de Dic. de 2020
Editada: Bruno Luong el 9 de Dic. de 2020
From Alexander Gallard above comment (I agree he should open a new thread)
"This method didn't work for me if my C was, say, [0,0,2]
If I want to remove two zeros this wasn't quite cutting it.'
A=[3 1 0 2 0 0 4];
B=[0 7 0 2];
D = DiffRep(A,B)
function D=DiffRep(A,B)
D=A(~ismember(count(A),count(B),'rows'));
end
function C=count(A)
A=A(:);
[C,i]=sort(A);
j=find([true;diff(C)]);
lgt=diff(j);
c=ones(size(A));
c(j(2:end))=1-lgt;
c=cumsum(c);
c(i)=c;
C=[A,c];
end
gives result
A =
3 1 0 2 0 0 4
B =
0 7 0 2
D =
3 1 0 4

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by