extract elements and build the remain vector

Hello Community,
i need your help.
A vector v has 128 elements with random numbers.
The elements of index 1 21 31 41 should be etracted, and saved as vector a.
the remain elements of vector v should be saved as vector b.
my version consist two for loops which is in deed a bad solution for large vectors.
PS: the vectors are not constant.
maybe someone could finish the algorithm:
v = 1:128;
a = v([1 21 31 41]);

 Réponse acceptée

Image Analyst
Image Analyst le 21 Déc 2020
Use setdiff():
N = 1600;
v = 1:N;
a = [2 59 87 113]
extracted = v(a)
otherIndexes = setdiff(1:length(v), a);
b = v(otherIndexes)

Plus de réponses (1)

David Hill
David Hill le 21 Déc 2020
a=v([1 21 31 41]);
b=v([2:20,22:30,32:40,42:end]);

5 commentaires

Marko
Marko le 21 Déc 2020
Modifié(e) : Marko le 21 Déc 2020
Hello David,
thank you for your fast response. I'm sorry for beeing not specfic enough.
Could you develop a code snippet also for non-constant vectors v,a ?
Best,
MJ
Depending on what random numbers you want, use rand() or randi() functions (assuming uniform distribution)
v=A*rand(1,128)-B;%generates random numbers between -B:A-B
ok, i see i was not clear enough.
i try beeing a precicsly as possible:
Vector v has N elements:
N = 1600;
v = 1:N;
Vector a is given and contains integer number: e.g.
a = [2 59 87 113]
How could an algorithm extract a from v and save the remaining elements in vector b.
Important: the vectors v and a have not a constant number of elments, they can change.
The solution should be for this example:
b=[1 3 ... 58 60 ... 86 88 ... 112 114 ... 1600]
b=v(~ismember(v,a));
Marko
Marko le 21 Déc 2020
Perfect!
You are a genius!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Get Started with MATLAB dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by