Arrange a set of elements in an array

1 vue (au cours des 30 derniers jours)
Soumyatha Gavvala
Soumyatha Gavvala le 28 Juin 2016
Commenté : Walter Roberson le 29 Juin 2016
Hello,
So i have an array that goes like this:
A=
[1
4
3
2
1
4
3
2
1
4
3
2
1
4
3
2
.
.
.
]
I want to arrange it as
A=
[4
3
2
1
4
3
2
1
4
3
2
1
4
3
2
1
4
3
2
1
]
How can I do this?
  2 commentaires
Adam
Adam le 28 Juin 2016
So you just want to move the 1 from the start to the end?!
Soumyatha Gavvala
Soumyatha Gavvala le 28 Juin 2016
No, I want to move all the 1's to the 4th position. They all correspond to another set of data and I use the dataset array for which this is one of the column.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 28 Juin 2016
t = reshape(A, 4, []);
t = t([2 3 4 1], :);
A = t(:);
  3 commentaires
Walter Roberson
Walter Roberson le 28 Juin 2016
Your question is not well defined yet.
If you just want to move the first point to end, as Adam questioned, then
A = [A(2:end); A(1)];
Walter Roberson
Walter Roberson le 29 Juin 2016
The desired outcome is not defined for the case where the array is not a multiple of 4 long. Consider the very last group and suppose it is only 3 long instead of 4, then it would be [1 4 3] for the input, and the 1 needs to move 3 places further down, so it would have to become [4 3 X 1] to match the pattern, but what goes where the X is? Should it become [4 3 2] to match the length? If so then where does the 2 come from? Should it become [4 3 1], moving the 1 to the end of the local group? Maybe, but you don't say what should happen. Perhaps it needs to be left as [1 4 3] if there is not the full set of 4 -- we don't know.

Connectez-vous pour commenter.

Plus de réponses (1)

John BG
John BG le 28 Juin 2016
Modifié(e) : John BG le 29 Juin 2016
Soumyatha
have you tried a circshift?
A = 1.00
4.00
3.00
2.00
1.00
4.00
3.00
2.00
1.00
4.00
3.00
2.00
1.00
4.00
3.00
2.00
circshift(A,-1)
=
4.00
3.00
2.00
1.00
4.00
3.00
2.00
1.00
4.00
3.00
2.00
1.00
4.00
3.00
2.00
1.00
or perhaps you mean that there may be any amount of each number:
L=uint64(randi([1 4],randi([10 27],1,1),1)) % this is just a test matrix
h1=histogram(L)
Val=h1.Values;
L0={};
for k=1:1:length(Val) L1=k.*ones(1,Val(k)); L0=[L0;L1]; end
% size matters: measure max chain length
dist1=zeros(1,length(Val)); for k=1:1:length(Val) dist1(k)=numel(L0{k}); end
L2=zeros(length(Val),max(dist1))
for k=1:1:length(Val) L2(k,[1:numel(L0{k})])=L0{k}; end
L3=flip(L2);
L4=uint64(nonzeros(L3(:)));
If you find this answer of any help solving your question,
please mark my answer as accepted
thanks in advance
John

Catégories

En savoir plus sur Cell Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by