matlab初学者在数组中遇到问题

Posted

技术标签:

【中文标题】matlab初学者在数组中遇到问题【英文标题】:matlab beginner with problems in array 【发布时间】:2014-01-08 20:12:58 【问题描述】:

我在 matlab 中有一个数组 Z=[x,y],我想删除 y 的零值以及相应的 x。我还想消除下降趋势。帮我 Z =

      0         0
   11.0000         0
   15.0000    4.1667
   23.0000    4.1667
   25.0000    2.7778
   28.0000         0
   49.0000         0
   54.0000    4.1667
   56.0000    4.1667
   61.0000    8.8889
   85.0000    8.8889
   93.0000    2.7778
   96.0000         0
  117.0000         0
  122.0000    4.1667
  124.0000    4.1667
  133.0000    9.7222
  135.0000    9.7222
  143.0000   13.8889
  155.0000   13.8889
  163.0000    9.7222
  176.0000    9.7222
  178.0000    8.8889
  185.0000    2.7778
  188.0000         0
  195.0000         0

【问题讨论】:

第二列的下降趋势是什么意思?你能用这个例子解释一下吗? 我想删除它开始减少到结束的点。我认为它在这个数组中发生了三次。 请尽可能清楚。在 P0W 响应的最后 Z 中,您要删除第 2 3 7 8 14 15 16 17 18 行吗? (这就是我理解的“下降趋势”) 【参考方案1】:

第一部分(删除第二列为零的行):如@P0W 的答案,但不需要all

Z(Z(:,2)==0,:) = [];

第二部分(删除第二列有下降趋势的行):使用diff

ind = find([diff(Z(:,2))]<0);
Z(union(ind,ind+1),:) = [];

我将“下降趋势”视为第二列中具有递减值的任何连续行组。

【讨论】:

【参考方案2】:

使用all

你的情况是:

all(Z(:,2)==0,2)第二列全部为零

然后,终于

Z(all(Z(:,2)==0,2),:)=[] 会给你预期的结果,即删除整行

Z =[     0         0   ;
   11.0000         0   ;
   15.0000    4.1667   ;
   23.0000    4.1667   ;
   25.0000    2.7778   ;
   28.0000         0   ;
   49.0000         0   ;
   54.0000    4.1667   ;
   56.0000    4.1667   ;
   61.0000    8.8889   ;
   85.0000    8.8889   ;
   93.0000    2.7778   ;
   96.0000         0   ;
  117.0000         0   ;
  122.0000    4.1667   ;
  124.0000    4.1667   ;
  133.0000    9.7222   ;
  135.0000    9.7222   ;
  143.0000   13.8889   ;
  155.0000   13.8889   ;
  163.0000    9.7222   ;
  176.0000    9.7222   ;
  178.0000    8.8889   ;
  185.0000    2.7778   ;
  188.0000         0   ;
  195.0000         0   ]

>> Z(all(Z(:,2)==0,2),:)=[]

Z =

   15.0000    4.1667
   23.0000    4.1667
   25.0000    2.7778
   54.0000    4.1667
   56.0000    4.1667
   61.0000    8.8889
   85.0000    8.8889
   93.0000    2.7778
  122.0000    4.1667
  124.0000    4.1667
  133.0000    9.7222
  135.0000    9.7222
  143.0000   13.8889
  155.0000   13.8889
  163.0000    9.7222
  176.0000    9.7222
  178.0000    8.8889
  185.0000    2.7778

【讨论】:

非常感谢您的帮助。还有一件事,我还想删除第二列中的下降趋势并删除相应的第一列值。

以上是关于matlab初学者在数组中遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

在ASP.NET开发网站过程中总会遇到未将对象引用到实例化这样的错误 我是初学者 请问该怎么办

MATLAB从入门到精通-如何在MATLAB中实现各种特殊上标?

初学awk数组会遇到的几个常见问题

Matlab中如何通过引用传递?

matlab如何批量读取mat文件中的矩阵?

MATLAB使用过程中遇到的问题(持续更新)