Arrange a set of elements in an array
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
Réponse acceptée
Walter Roberson
le 28 Juin 2016
t = reshape(A, 4, []);
t = t([2 3 4 1], :);
A = t(:);
3 commentaires
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
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.
Plus de réponses (1)
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
0 commentaires
Voir également
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!