Rearrangement of vector elements

2 views (last 30 days)
Dc
Dc on 8 Apr 2021
Commented: Jan on 8 Apr 2021
Hello everyone,
I have a vector that contains 1252459 elements and I need to rearrange these elements so that every 250th and 251nd element become the last elements of the vector. To be more clear, if the initial vector is
b=[1st element; 2nd element;...; 250th element; 251st element; ...; 500th element; 501st element;...;1252459th element]
it has to become
b=[1st element; 2nd element; ... (every element that should not be moved here) ... ; former 250th element; former 251st element; former 500th element; former 501st element; former 750th element ; former 751st element;...]
Thanks in advance.

Answers (2)

Fangjun Jiang
Fangjun Jiang on 8 Apr 2021
something like this?
a=(1:95)'
b=reshape(a,19,[])
c=b(1:11,:)
d=c(:)

Jan
Jan on 8 Apr 2021
Edited: Jan on 8 Apr 2021
Maybe you want:
b = rand(1252459, 1);
match = false(size(b));
match(1:249:end) = true;
match(2:249:end) = true;
c = b(match);
  2 Comments
Dc
Dc on 8 Apr 2021
Could you please explain how the rearrangement occurs, since I am not very familiar with using logical arguments? As far as I understand your code, you create a matrix "match" of logical zeros with the same size as b and then assign to the values tha need to be moved a logical 1. I don't quite understand the "c=b(match)" and how it moves the elements in the desired way.
Thanks in advance.
Jan
Jan on 8 Apr 2021
Try it with some smaller data:
x = 11:20
m = false(size(x))
m([2,4,6]) = true
x(m)
m contains FALSE values except for the 2nd, 4th and 6th value, which are true. Using this vector as "logical index", only the elements are replied, which have a TRUE inside the index vector.

Sign in to comment.

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!