|
原帖由 friendchj 于 2008-11-30 23:27 发表
说一下我的思路:
1.用sort函数对Z排序;
2.对排序后的Z,用diff做差分,得结果为Zd;
3. 寻找Zd中的零,如:1 0 0 2 0 3 0 0 0, 把 连零如“0 0”,“0”“0 0 0”分别看成一组;
4.对每一组按Y大于零和Y小于零归 ...
按这个思路写的程序:
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,3,-1,3,4,-2,-1,3]';
z=[1,2,2,4,5,6,6,6,3]';
[z1,IX] = sort(z,'descend');% 对z降序排列
x1=x(IX);
y1=y(IX);
zd=diff(z1);
a=[];
for i=1:length(zd)
if zd(i)==0
a=[a,i]; % 记录z相等的数的位置
else
if ~isempty(a) % 若存在z相等的情况,进行处理
a=[a,max(a)+1];
ind1=find(y1(a)>=0); % 按y大于0和y小于0归类
ind2=find(y1(a)<0);
[xs1,IX1]=sort(x1(a(ind1)),'descend'); % 对应y大于0的x降序排列
[xs2,IX2]=sort(x1(a(ind2))); % 对应y小于0的x升序排列
x1(a)=[xs1;xs2]; % 重组排列后的x
yy1=y1(a(ind1)); % 重组排列后的y
yy2=y1(a(ind2));
y1(a)=[yy1(IX1);yy2(IX2)];
a=[];
end
end
end
disp('原始数据:z|y|x');disp([z,y,x])
disp('重排数据:z|y|x');disp([z1,y1,x1])
~~~~~~~~~~~~~~~~~~~~~~~
运行结果:
原始数据:z|y|x
1 1 1
2 2 2
2 3 3
4 -1 4
5 3 5
6 4 6
6 -2 7
6 -1 8
3 3 9
重排数据:z|y|x
6 4 6
6 -2 7
6 -1 8
5 3 5
4 -1 4
3 3 9
2 3 3
2 2 2
1 1 1 |
评分
-
1
查看全部评分
-
|