非常感觉楼上的呀,真的,很感谢你,你能不能帮我修改一下呀,现在要求变为:还是有一个N行三列的数据存储着一个曲面的坐标,现在按(1)Y从大小到排列;(2)对相同的Y来说,此时按X从大到小排列(或者从小到 ...
其实这一个,可以对比着上一个来修改。
~~~~~~~~~~~~~~~~~~~~~~~~~
clc
clear
% load data.txt
% x=data(:,1);
% y=data(:,2);
% z=data(:,3);
% clear data
% 实验数据
x=';
y=';
z=';
= 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=; % 记录y相等的数的位置
else
if ~isempty(a) % 若存在y相等的情况,进行处理
a=;
=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()
disp('重排数据:y|x|z');disp()
~~~~~~~~~~~~~~~~~~~~~~
运行结果:
原始数据: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
回复 16楼 friendchj 的帖子
恩,谢谢你呀回复 16楼 friendchj 的帖子
我的数据在D盘,文件名为data.txt,我怎么把数据导入重新排序呀,谢谢!回复 16楼 friendchj 的帖子
我试一组数据,怎么不对呢?谢谢原始数据:y|x|z
2 1 1
2 -1 2
2 3 3
2 -4 4
2 2 5
2 -3 6
6 12 7
6 2 8
6 -5 9
6 4 0
3 2 1
3 -2 7
3 1 9
3 -5 12
重排数据:y|x|z
6 12 7
6 4 0
6 2 8
6 -5 9
3 -5 12
3 -2 7
3 1 9
3 2 1
2 1 1
2 -1 2
2 3 3
2 -4 4
2 2 5
2 -3 6
回复 18楼 fanzhenjie 的帖子
把data.txt和程序放在一个文件夹下就行。或者用完整的路径名,如load E:\data.txt 原帖由 fanzhenjie 于 2008-12-3 17:26 发表 http://www.chinavib.com/forum/images/common/back.gif我试一组数据,怎么不对呢?谢谢
sorry,这是由于没有考虑特殊情况导致的,新改的程序如下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clc
clear
% load data.txt
% x=data(:,1);
% y=data(:,2);
% z=data(:,3);
% clear data
% 实验数据
data=[2 1 1;2 -1 2;2 3 3;2 -4 4;2 2 5;2 -3 6;...
6 12 7;6 2 8;6 -5 9;6 4 0;3 2 1;3 -2 7;...
3 1 9;3 -5 12];
y=data(:,1);
x=data(:,2);
z=data(:,3);
= 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=; % 记录y相等的数的位置
else
if ~isempty(a) % 若存在y相等的情况,进行处理
a=;
=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
if i==length(yd) % 判断最后的一组数据是否要重排
if ~isempty(a) % 若存在y相等的情况,进行处理
a=;
=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()
disp('重排数据:y|x|z');disp()
~~~~~~~~~~~~~~~~~~~~~~~
运行结果:
原始数据:y|x|z
2 1 1
2 -1 2
2 3 3
2 -4 4
2 2 5
2 -3 6
6 12 7
6 2 8
6 -5 9
6 4 0
3 2 1
3 -2 7
3 1 9
3 -5 12
重排数据:y|x|z
6 12 7
6 4 0
6 2 8
6 -5 9
3 -5 12
3 -2 7
3 1 9
3 2 1
2 3 3
2 2 5
2 1 1
2 -1 2
2 -3 6
2 -4 4
回复 21楼 friendchj 的帖子
谢谢楼主的耐心指导,真的,很感谢你!对了,load能导入EXCEL数据吗?用什么指令能导入EXCEL数据呀!感觉你们懂的挺多!回复 22楼 fanzhenjie 的帖子
在本版搜索一下吧,或者help xlsread回复 21楼 friendchj 的帖子
假设我现在想这样排列这些数据一个数组Y存放着许多数,最大数为100,最小数不清楚哈,要自己判断,数据的个数也不清楚,得自己判断数组,我就想把其中大于等于95小于100的数变为(95+100)./2;大于等于90小于95的数变为(90+95)./2;大于等于85小于80的数变为(85+80)./2;依次类推,每个区间数的个数不确定,即95到100之间的数不一定和95到90之间的数相等,还有很多这样的数,应该怎么写循环呀,谢谢,我自己写了几句,肯定不对,也帮我看看吧!真的很感谢你,感觉自己学到了很多东西!我举了个例子y=;
ymin=95;
ymax=100;
if b=find((y>=ymin)&(y<ymax))
y(b)=(ymax+ymin)./2;
else
ymax=ymax-5;
ymin=ymin-5;
end
页:
1
[2]