查看: 273|回复: 10|关注: 0

[已解决] 请教下,为什么将数据存入矩阵时,只有第一列存进去了,第一列后面都没有存进去

[复制链接]

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
本帖最后由 刘美美的论坛 于 2020-7-31 21:35 编辑

如图,按道理第一列后根据这个for循环抛下都应该有数据的,但是最后M矩阵只有第一列的数据。请教下各位大佬问题出在哪里了?

谢谢了
微信截图_20200731204805.jpg

Rain.mat

7.89 KB, 下载次数: 1

PWV.mat

499.56 KB, 下载次数: 1

Rainfall_times.m

1.54 KB, 下载次数: 0

回复主题 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 20:58:08 | 显示全部楼层
感觉就像只循环了一次一样,后面的列都没有数据存放到M里
回复此楼 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 21:00:22 | 显示全部楼层
刘美美的论坛 发表于 2020-7-31 20:58
感觉就像只循环了一次一样,后面的列都没有数据存放到M里

而且,除了第一列后面的,都都有满足条件的的,结果一个数据都没有,到底是哪里出现了问题
回复此楼 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 21:13:14 | 显示全部楼层
M(j,i)=m;

这样有问题吗?搞崩溃了,为什么第二列到第N列就没有数据。

这样不就是,在循环第一次的时候:首先得到第一列,在按行判断,将判断后的结果存入M里。然后,外循环第二次,再将第二列的判断结果存在M里。

怎么都想不出这样有什么问题。。  而且,我还检查了,后面的列也有很多满足IF中的判断条件啊。。。

怎么就全是0了。难受。哪位大佬帮忙指点一下,问题出出在哪里了?


谢谢了
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1509

帖子

321

最佳答案
  • 关注者: 77
发表于 2020-7-31 21:30:11 | 显示全部楼层
请上传代码
回复此楼 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 21:32:24 | 显示全部楼层

%% 导入数据
clc,clear,dbstop if error
PWV=xlsread('E:\相对湿度\平均值作为阈值\1月\2014年1月PWV.xls');
Rain=xlsread('E:\相对湿度\平均值作为阈值\1月\2014年1月Rain.xls');

Rr=Rain;
Pp=PWV;

New=zeros(1,99);
aa=[New;Rr];
bb=[New;Pp];
[HANG,LIE]=size(aa);
b=zeros(50,1);

%% 建立存储数据的0矩阵
B=zeros(40,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
ind_1;
ind_2;
%% 赋值
[m,n]=size(ind_2);
M=zeros(99,99);
%% 循环
for i=1:99
%       p=PWV(:,i);
%       r=Rain(:,i);
      k2=ind_2(:,i);
      k1=ind_1(:,i);
      for j=1:m-1
        if k2(j+1)>0 && k2(j+1)>1 && k2(j+1)-k1(j)<5  
          m=k2(j+1);
        else
          m=0;
        end
                      M(j,i)=m;
      end
end
回复此楼 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 21:44:05 | 显示全部楼层

怎么样大哥  看明白了吗   
我觉得没啥问题啊,想不出来。就想外循环只循环了一次一样
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1509

帖子

321

最佳答案
  • 关注者: 77
发表于 2020-7-31 21:48:16 | 显示全部楼层
看了一下,似乎满足if条件的不多啊
1.PNG
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1509

帖子

321

最佳答案
  • 关注者: 77
发表于 2020-7-31 22:06:09 | 显示全部楼层 |此回复为最佳答案
问题出在m变量名冲突了,修改如下
  1. %% 导入数据
  2. clc,clear,dbstop if error
  3. load PWV
  4. load Rain

  5. Rr=Rain;
  6. Pp=PWV;

  7. New=zeros(1,99);
  8. aa=[New;Rr];
  9. bb=[New;Pp];
  10. [HANG,LIE]=size(aa);
  11. b=zeros(50,1);

  12. %% 建立存储数据的0矩阵
  13. B=zeros(40,1);
  14. m=zeros(6,40);                        % 存放降雨前的PWV值
  15. ind_1=zeros(60,LIE);                  % 存放无降雨(0)序号
  16. ind_2=zeros(60,LIE);                  % 存放降雨序号
  17. %% 循环
  18. for jj=1:LIE
  19.     a=aa(:,jj);                       % 按列提取数据
  20.     b=bb(:,jj);
  21.     a_neq_0=a~=0;
  22.     k=diff([0;a_neq_0;0]);
  23.     ind11=find(k==-1);                % 记录一段连续0中的第一个0的位置.假如第一段全为0,那么就记录第二段连续为0的第一个0的位置;
  24.     ind22=find(k==1);                 % 记录一段连续1中的第一个1的位置
  25.     if isempty(ind11)==1              % 判断空矩阵,首先,空矩阵意味着没有降雨;赋值三个0给空矩阵,为了下面好存储数据
  26.         ind11=[1,1,1]';
  27.         ind22=[1,1,1]';
  28.     else
  29.         ind11;
  30.         ind22;
  31.     end
  32.     [hang_11,lie_11]=size(ind11);
  33.     ind_1(1:hang_11,jj)=ind11;
  34.     ind_2(1:hang_11,jj)=ind22;
  35. end
  36. ind_1;
  37. ind_2;
  38. %% 赋值
  39. [m1,n]=size(ind_2);
  40. M=zeros(99,99);
  41. %% 循环
  42. ss=[];
  43. for i=1:99
  44.     %       p=PWV(:,i);
  45.     %       r=Rain(:,i);
  46.     k2=ind_2(:,i);
  47.     k1=ind_1(:,i);
  48.     for j=1:m1-1
  49.         if k2(j+1)>0 && k2(j+1)>1 && k2(j+1)-k1(j)<5
  50.             m=k2(j+1);
  51.             ss=[ss,m];
  52.         else
  53.             m=0;
  54.         end
  55.         M(j,i)=m;
  56.     end
  57. end
复制代码
回复此楼 已获打赏: 0 积分

举报

新手

29 麦片

财富积分


050


35

主题

79

帖子

0

最佳答案
 楼主| 发表于 2020-7-31 22:09:03 | 显示全部楼层
20141303 发表于 2020-7-31 22:06
问题出在m变量名冲突了,修改如下

谢谢  没注意  
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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