hi, if i have this vector
r=[2 4 18 5 6 15 3 4 16]; i need arrange index 3,6,9 with ascending, and each both previous index are arranged according for that as:
r=[5 6 15 3 4 16 2 4 18]; i.e just 3,6,.....are arranged with ascending and the index befor it are arranged according to third , sixth,..... i would to say ,this is just example i have too long vector

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2012년 4월 28일

1 개 추천

[ii,ii] = sort(r(3:3:end));
out = reshape(r(bsxfun(@plus,ii*3,(-2:0)')),1,[]);
OR:
out = reshape(sortrows(reshape(r,3,[])',3)',1,[]);

댓글 수: 7

huda nawaf
huda nawaf 2012년 4월 28일
thanks,
this is what i need , but what i have to do if need vector as:
r=[5 6 3 4 2 4];
i.e 15, 16, 18 are deleted
thanks in advance
Image Analyst
Image Analyst 2012년 4월 28일
out(3:3:end) = []
huda nawaf
huda nawaf 2012년 4월 28일
thanks,
but when try it with vector with length 8
i get error
ex.
s1=[1 3 4 5 62 3 5 7 ];
>> out(i,:) = reshape(sortrows(reshape(s1,3,[])',3)',1,[]);
??? Error using ==> reshape
Product of known dimensions, 3, not divisible into
total number of elements, 8.
what i ahve to do in this case?
Image Analyst
Image Analyst 2012년 4월 28일
You violated your original description, where you had a multiple of three elements and you sorted the "third" ones, and moved them around to their new location, taking the prior two elements with them to their new locations. Now with 8 elements you have an extra two elements (at indexes 7 and 8) that don't have a third element associated with them at index 9. Please think about what you want to do in general and then share that.
huda nawaf
huda nawaf 2012년 4월 28일
i want arrange the third , sixth, ninth,....elements with ascending , but when these elemnts are arranged the other elements that correspond with it it must be arranged also according to the
as example above
r=[2 4 18 5 6 15 3 4 16];
it must be as:
r=[5 6 15 3 4 16 2 4 18]
thanks
huda nawaf
huda nawaf 2012년 4월 28일
what if need that
ex. r=[1 2 4 18 5 6 15 3 4 16];
if need 1 in same index and the other values as:
r=[1 5 6 15 3 4 16 2 4 18];
what will be changed in this command?
out = reshape(sortrows(reshape(r,3,[])',3)',1,[]);
Andrei Bobrov
Andrei Bobrov 2012년 4월 29일
out = [r(1),reshape(sortrows(reshape(r(2:end),3,[])',3)',1,[])];

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by