Sorting a complex array and its derivatives
1 次查看(过去 30 天)
显示 更早的评论
Dear all,
There is a complex 2D-array X, where each row should be sorted according to the absolute values within the row. Moreover, another array ( angle1=angle(X)) should be sorted in the same way (ranged according to the absolute values within the row).
Here is an example:
X=[14.3353097177036 + 0.368132698534547i,0.0778904302845413 - 20.6057085094919i,-14.3353097177036 - 0.368132698534547i,-0.0778904302845413 + 20.6057085094919i;8.35480739256033 + 11.6726455859351i,16.4810429757788 - 12.3489579854284i,-8.35480739256033 - 11.6726455859351i,-16.4810429757788 + 12.3489579854284i;19.7759267690159 + 5.70662750381570i,4.28306576088118 - 13.7160457900973i,-19.7759267690159 - 5.70662750381570i,-4.28306576088118 + 13.7160457900973i;13.5402031155189 - 4.85415907641717i,7.36014471986172 + 19.2099850443929i,-13.5402031155189 + 4.85415907641717i,-7.36014471986172 - 19.2099850443929i;12.0467821469972 + 7.88699653993500i,10.8882591549695 - 17.4411711698051i,-12.0467821469972 - 7.88699653993500i,-10.8882591549695 + 17.4411711698051i];
angle1=angle(X);
[~,idx]=sort(abs(X),2);
angle2=NaN.*X;
for zz=1:5
angle2(zz,:)=angle(X(zz,idx(zz,:)));
end
angle3=angle1(idx);
So, the correct answer is delieved in angle2 based on for loop.
I was expecting that array of indices in every row (variable idx) would do the same job, but without for loop, however, angle3 just contains 4 values (1st,2nd, 3rd,4th of the original array), which is though logical because idx has only integer values 1..4.
Is there an elegant way to solve this problem?
Thank you in advance!
0 个评论
回答(1 个)
Ankita Bansal
2018-6-18
编辑:Ankita Bansal
2018-6-18
You can write
B = sort(X,2,'ComparisonMethod','abs')
angle1=angle(B);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!