friendchj 发表于 2008-12-2 10:46

原帖由 fanzhenjie 于 2008-12-2 09:55 发表 http://www.chinavib.com/forum/images/common/back.gif
非常感觉楼上的呀,真的,很感谢你,你能不能帮我修改一下呀,现在要求变为:还是有一个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

fanzhenjie 发表于 2008-12-2 11:23

回复 16楼 friendchj 的帖子

恩,谢谢你呀

fanzhenjie 发表于 2008-12-3 16:59

回复 16楼 friendchj 的帖子

我的数据在D盘,文件名为data.txt,我怎么把数据导入重新排序呀,谢谢!

fanzhenjie 发表于 2008-12-3 17:26

回复 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

friendchj 发表于 2008-12-3 17:29

回复 18楼 fanzhenjie 的帖子

把data.txt和程序放在一个文件夹下就行。或者用完整的路径名,如load E:\data.txt

friendchj 发表于 2008-12-3 18:47

原帖由 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

fanzhenjie 发表于 2008-12-3 22:09

回复 21楼 friendchj 的帖子

谢谢楼主的耐心指导,真的,很感谢你!对了,load能导入EXCEL数据吗?用什么指令能导入EXCEL数据呀!感觉你们懂的挺多!

friendchj 发表于 2008-12-3 23:43

回复 22楼 fanzhenjie 的帖子

在本版搜索一下吧,或者help xlsread

fanzhenjie 发表于 2008-12-5 21:27

回复 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]
查看完整版本: 请教:这个问题应该怎么控制呢?