Matlab找到第一个负数系列

时间:2013-01-05 15:15:57

标签: matlab vectorization

使用Matlab中的数字矩阵,如何在一系列正数后找到第一个负数?

到目前为止,我能想出的唯一答案是编写一个循环来检查第一个负数,然后记录它,然后查找第一个正数,并在那里截断数组,然后重新开始。有没有矢量化的方法来做到这一点?

例如,我有x = [ -1 -5 -2 3 4 8 -2 -3 1 9],我想要这个函数或脚本给我一个y = [1 7]数组。

2 个答案:

答案 0 :(得分:3)

find(diff(sign([1 x]))<0)

也就是说:找到x中连续元素之间符号差异为负的位置哦,并将1推到x的前面以处理第一个元素已经是否定的

答案 1 :(得分:1)

这是一个非常自制的解决方案,请查看

x = [ -1 -5 -2 3 4 8 -2 -3 1 9]

neg_idx = find(x < 0)     % // negative values
z = [0 diff(neg_idx)]     % // increments among indices of successive values;
                          % // consecutive indices return a difference of 1 whereas
                          % // non consecutive return a value greater than 1.
                          % // because the first element must be distinguished 
                          % // we put the zero in front
id = find(z ~= 1)         % // Every time there is a jump, a non consecutive neg.
                          % // value appears 

% // thus the solution is in                     
y = neg_idx(id)           

 ans =

 1     7

如果neg_idx为空(即不涉及负值),您将获得Index exceeds matrix dimensions,但条件是立即检查。