爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13660|回复: 7

[讨论] 对一个m*n的数据进行出,怎么弄最后结果都只显示最后一组数据,求各位大佬指点

[复制链接]

新浪微博达人勋

发表于 2020-7-7 20:17:05 | 显示全部楼层 |阅读模式
50金钱
数据是按列计算的,即使有些列全为0是空的,那最后结果也不会只显示一列吧,至少也有好几十列数据。
如图,只显示了最后一列的结果,其他列直接没数据。

各位大佬们帮我看一下是哪里出了问题,我搞好了3天了,实在太垃圾了,自己没法独自解决,跪求大佬们帮帮忙。

下面附上程序和数据。我觉得:我最后将数据存放到0矩阵里也没弄错啊,为什么会这样。好难受

微信截546.jpg

Tq_PWV_2.m

3.68 KB, 下载次数: 0, 下载积分: 金钱 -5

chang.m

2.5 KB, 下载次数: 0, 下载积分: 金钱 -5

P.mat

65.5 KB, 下载次数: 0, 下载积分: 金钱 -5

R.mat

2.19 KB, 下载次数: 0, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-7-7 20:19:07 | 显示全部楼层
自己怎么都看不出程序哪里出现问题了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-7 20:21:14 | 显示全部楼层
本帖最后由 卫宫切嗣菲尔 于 2020-7-7 20:25 编辑

clc,clear all,dbstop if error
% a=[0 0 0 0 0 1 2 0 0 0 0 20 0 0 0 0 0 3 2 5 4 0 0 0 5]';
% b=[1 2 45 21 1 50 2 3 4 43 5 0 0 2 3 6 45 5 6 8 7 8 65 63 6]';
load P
load R
Rr=Rain;
Pp=PWV;

New=zeros(5,99);
aa=[New;Rr];
bb=[New;Pp];
[HANG,LIE]=size(aa);
%% 建立存储数据的0矩阵
C=zeros(60,99);                     %定义0矩阵,用来存储后面的结果
H=zeros(60,1);
B=zeros(60,1);
m=zeros(6,40);                       % 存放降雨前的PWV值
ind_1=zeros(60,LIE);                  % 存放无降雨(0)序号   
ind_2=zeros(60,LIE);                  % 存放降雨序号
%% 循环
for jj=1:LIE
    a=aa(:,jj);                      % 按列提取数据
    b=bb(:,jj);
    a_neq_0=a~=0;
    k=diff([0;a_neq_0;0]);
    ind11=find(k==-1);                % 记录一段连续0中的第一个0的位置.假如第一段全为0,那么就记录第二段连续为0的第一个0的位置;
    ind22=find(k==1);                 % 记录一段连续1中的第一个1的位置
    if isempty(ind11)==1              % 判断空矩阵,首先,空矩阵意味着没有降雨;赋值三个0给空矩阵,为了下面好存储数据
       ind11=[1,1,1]';
       ind22=[1,1,1]';
    else
        ind11;
        ind22;
    end
    [hang_11,lie_11]=size(ind11);
    ind_1(1:hang_11,jj)=ind11;   
    ind_2(1:hang_11,jj)=ind22;
end

for i=1:99                              % 第二个for循环
        a=aa(:,i);                      % 按列提取数据
        b=bb(:,i);
      
        ind1=ind_1(:,i);
        ind1a=ind_1(:,i);
        ind1a(ind1a==0)=[];
        nn=length(ind1a);    % 数据长度
        
        ind2=ind_2(:,i);
%       ind2(ind2==0)=[];
%       ind2=ind2(1:length(ind2),1);

for e=1:ind1     
     
       if  ind1(1)==length(a)+1 && ind2(1)==6               % 降雨全为1,需要删除数据
            p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
           [hang,lie]=size(m);
       elseif ind1(1)-ind2(1)==0 && ind1(2)-ind2(2)==0      % 降雨全为0,没有下雨的情况
            p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
            [hang,lie]=size(m);
            
        elseif ind2(1)==9  && e+1<nn     % 大于9时才能保证前面有连续3个小时没有降雨
            p1=b(ind2(1)); p2=b(ind2(1)-1); p3=b(ind2(2)-2); p4=b(ind2(1)-3); p5=0;p6=0;
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
            [hang,lie]=size(m);
            
        elseif ind2(1)>9  && e+1<nn && ind2(e+1)-ind2(e)<=4   % 中间3小时内无雨,忽略不计
            p1=b(ind2(e)); p2=b(ind2(e)-1); p3=b(ind2(e)-2); p4=b(ind2(e)-3); p5=b(ind2(e)-4);p6=b(ind2(e)-5);
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
            [hang,lie]=size(m);
                 
       elseif ind2(1)<9 && ind2(2)>9 && e+1<nn   && ind2(e+1)-ind2(e)<=4     % 中间3小时内无雨,忽略不计
            p1=b(ind2(e)); p2=b(ind2(e)-1); p3=b(ind2(e)-2); p4=b(ind2(e)-3); p5=b(ind2(e)-4);p6=b(ind2(e)-5);
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
            [hang,lie]=size(m);
       else
            p1=0; p2=0; p3=0; p4=0; p5=0;p6=0;
            m1=[p1,p2,p3,p4,p5,p6]';
            m(:,e)=m1;
            m(:,all(m==0,1))=[];
           [hang,lie]=size(m);
       end
           for kk=1:lie
               p1=m(1,kk);p2=m(2,kk);p3=m(3,kk);p4=m(4,kk);p5=m(5,kk);p6=m(6,kk);
               [z,t,bhl,max_p,min_p]=chang(p1,p2,p3,p4,p5,p6);
           
               B(kk,1)=bhl;       % 这里将结果存放到B中
          end

end

             H(:,jj)=B;       %   % 然后这里,再将B存放到H中,,,我觉得每次把得出的结果这样存到矩阵中没有错啊  好难受,搞不明白
             F=unique(H);      %

%            F(F==0)=[];
end
这个是主程序跑的代码,方便各位大佬支出错误所在,谢谢了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-7-7 20:33:54 | 显示全部楼层
50金钱 有钱啊
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-7 20:54:45 | 显示全部楼层

。。。。。。。。。。。。。。。。。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-7-8 09:51:08 | 显示全部楼层
H(:,jj)=B;       %   % 然后这里,再将B存放到H中,,,我觉得每次把得出的结果这样存到矩阵中没有错啊  好难受,搞不明白
这一行代码的jj不在你的for jj=1:LIE循环里面,循环在前面就已经结束了,你的jj只等于最后那个值,所以结果只有最后一列啊,建议看一下循环。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-8 11:20:59 | 显示全部楼层
亲三儿 发表于 2020-7-8 09:51
H(:,jj)=B;       %   % 然后这里,再将B存放到H中,,,我觉得每次把得出的结果这样存到矩阵中没有错啊   ...

好的  谢谢大佬指点
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-8 11:23:41 | 显示全部楼层
自己已解决了,谢谢各为大佬光临本帖
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表