|
原帖由 fanzhenjie 于 2008-12-2 09:55 发表
非常感觉楼上的呀,真的,很感谢你,你能不能帮我修改一下呀,现在要求变为:还是有一个N行三列的数据存储着一个曲面的坐标,现在按(1)Y从大小到排列;(2)对相同的Y来说,此时按X从大到小排列(或者从小到 ...
其实这一个,可以对比着上一个来修改。
~~~~~~~~~~~~~~~~~~~~~~~~~
clc
clear
% load data.txt
% x=data(:,1);
% y=data(:,2);
% z=data(:,3);
% clear data
% 实验数据
x=[1,2,3,4,5,6,7,8,9]';
y=[1,2,2,-1,3,3,-2,1,3]';
z=[1,2,5,4,3,6,7,5,3]';
[y1,IX] = sort(y,'descend');% 对z降序排列
x1=x(IX);
z1=z(IX);
yd=diff(y1);
a=[];
j=1;
str=cellstr(['ascend ';'descend']);
for i=1:length(yd)
if yd(i)==0
a=[a,i]; % 记录y相等的数的位置
else
if ~isempty(a) % 若存在y相等的情况,进行处理
a=[a,max(a)+1];
[xs1,IX1]=sort(x1(a),str{mod(j,2)+1}); % 对应y相等的x交替排序
x1(a)=xs1; % 重组排列后的x
yy1=y1(a); % 重组排列后的y
y1(a)=yy1(IX1);
zz1=z1(a); % 重组排列后的z
z1(a)=zz1(IX1);
a=[];
j=j+1;
end
end
end
disp('原始数据:y|x|z');disp([y,x,z])
disp('重排数据:y|x|z');disp([y1,x1,z1])
~~~~~~~~~~~~~~~~~~~~~~
运行结果:
原始数据:y|x|z
1 1 1
2 2 2
2 3 5
-1 4 4
3 5 3
3 6 6
-2 7 7
1 8 5
3 9 3
重排数据:y|x|z
3 9 3
3 6 6
3 5 3
2 2 2
2 3 5
1 8 5
1 1 1
-1 4 4
-2 7 7 |
|