Rearrange a given array

11 views (last 30 days)
luca
luca on 16 Sep 2019
Commented: luca on 16 Sep 2019
Given a vector
V = [ 19 15 11 2 16 3 1 18 14 3 18 19 20 1 13 4 14 3 1 2 16 4 3 1 19 3 20 4 13 1 15 2 18 4 1 20 19 17 3 1 13 20 3 4 17 18 19 20 14 15 11 2]
I would like to rearrange V in this way.
every 10 element I want to collect the elements that are in the same column of A
A= [0 15 11 2 4 0 3 1 13;
14 0 16 0 0 0 0 0 0;
0 0 0 0 8 0 0 0 0;
0 0 18 0 0 0 0 0 0;
0 0 19 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0];
In this case, we want to collect 11,16,18,19 and also 4,8. Doesn't mind for the others that are just one in the columns, but if we have the same number I want to collect this two number together (see below with 3)
So for example, for the first 10 elements:
19 15 11 2 16 3 1 18 14 3
they will be rearrange as
19 11 16 18 15 2 3 3 1 14

Accepted Answer

Guillaume
Guillaume on 16 Sep 2019
Edited: Guillaume on 16 Sep 2019
This would work as long as V has a multiple of 10 elements:
%demo data
V = [ 19 15 11 2 16 3 1 18 14 3 18 19 20 1 13 4 14 3 1 2 16 4 3 1 19 3 20 4 13 1 15 2 18 4 1 20 19 17 3 1 13 20 3 4 17 18 19 20 14 15];
A= [0 15 11 2 4 0 3 1 13;
14 0 16 0 0 0 0 0 0;
0 0 0 0 8 0 0 0 0;
0 0 18 0 0 0 0 0 0;
0 0 19 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0];
assert(mod(numel(V), 10) == 0, 'V length is not a multiple of 10');
V10 = reshape(V, 10, []); %rearrange V in batches of 10
[~, where] = ismember(V10, A); %find location of elements in A
[~, col] = ind2sub(size(A), where); %convert location into column index
[~, order] = sort(col, 1); %and sort by column order
newV = reshape(V10(order + (0:size(order, 1):numel(order)-1)), 1, []) %and rearrange columns of V10 according to that order
Note that elements of V not found in A get reordered first in each group of 10.
  7 Comments
Guillaume
Guillaume on 16 Sep 2019
Oh, yes, forgot I'm not sorting the numbers but their column position (which is 0 for NaNs).
newV = V(~isnan(V))
for the last line. The rest as before.
luca
luca on 16 Sep 2019
thanks again for your time

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!