Rearrange a given array

17 Ansichten (letzte 30 Tage)
luca
luca am 16 Sep. 2019
Kommentiert: luca am 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

Akzeptierte Antwort

Guillaume
Guillaume am 16 Sep. 2019
Bearbeitet: Guillaume am 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 Kommentare
Guillaume
Guillaume am 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 am 16 Sep. 2019
thanks again for your time

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

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

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by