I have a matrix, lets call it M. The elements of M have values between -2 to +2. For example, M is a row matrix,
and it is given by
M = [2 1.3 1.4 1.1 -1 -0.9 -0.5 0 0.5 0.9 1.1 0.9 1.6 0.8 0.2 1.1....]
I would like to sort the elemnts according to: .
i.e., in the above example, the grouping should look like this: {2 1.3 1.4 1.1 -1}, { -0.9 -0.5 0 .5 0.9},{1.1}, { 0.9 }, {1.6},{0.8 0.2}, {1.1}..
Similarly, I would like to do this kind of sorting at each row for a matrix M(i,j).
Can anyone please help me how to do it in MATLAB?
Thanks!

댓글 수: 4

Voss
Voss 2023년 1월 20일
Why is the grouping not
{2 1.3 1.4 1.1 -1}, { -0.9 -0.5 0 .5 0.9}, {1.1}, {0.9}, {1.6}, {0.8 0.2}, {1.1}, ...
?
Anjan Dadgupta
Anjan Dadgupta 2023년 1월 20일
Thanks for pointing out.
It has been modified now.
Matt J
Matt J 2023년 1월 20일
편집: Matt J 2023년 1월 20일
I for one do not understand the grouping criterion. Are you just grouping monotonically increasing/decreasing runs of numbers together? How should the final result be stored if there are a different number of groups in each row of M? And what do you plan to do with the groups once you've isolated them?
M = [2 1.3 1.4 1.1 -1 -0.9 -0.5 0 0.5 0.9 1.1 0.9 1.6 0.8 0.2 1.1];
index=and(M>-1, M<1)
index = 1×16 logical array
0 0 0 0 0 1 1 1 1 1 0 1 0 1 1 0
For one row of data, I think the logic for grouping is to check the change of value in "index" above

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

답변 (1개)

Dyuman Joshi
Dyuman Joshi 2023년 1월 20일

0 개 추천

M = [2 1.3 1.4 1.1 -1 -0.9 -0.5 0 0.5 0.9 1.1 0.9 1.6 0.8 0.2 1.1];
index=and(M>-1, M<1);
idx=unique([1 find(diff(index)~=0)+1 numel(M)+1]);
out=mat2cell(M,1,diff(idx))
out = 1×7 cell array
{[2 1.3000 1.4000 1.1000 -1]} {[-0.9000 -0.5000 0 0.5000 0.9000]} {[1.1000]} {[0.9000]} {[1.6000]} {[0.8000 0.2000]} {[1.1000]}

카테고리

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

제품

릴리스

R2020b

태그

질문:

2023년 1월 20일

답변:

2023년 1월 20일

Community Treasure Hunt

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

Start Hunting!

Translated by