使用 Matlab 中的数字矩阵,您将如何找到一系列正数之后的第一个负数?
到目前为止,我能想到的唯一答案是编写一个循环来检查第一个负数,然后记录它,然后查找第一个正数,并在那里截断数组,然后重新开始。有没有一种矢量化的方式来做到这一点?
例如,我有x = [ -1 -5 -2 3 4 8 -2 -3 1 9]
,并且我希望这个函数或脚本给我一个 . 数组y = [1 7]
。
使用 Matlab 中的数字矩阵,您将如何找到一系列正数之后的第一个负数?
到目前为止,我能想到的唯一答案是编写一个循环来检查第一个负数,然后记录它,然后查找第一个正数,并在那里截断数组,然后重新开始。有没有一种矢量化的方式来做到这一点?
例如,我有x = [ -1 -5 -2 3 4 8 -2 -3 1 9]
,并且我希望这个函数或脚本给我一个 . 数组y = [1 7]
。
或者
find(diff(sign([1 x]))<0)
也就是说:找到x
连续元素之间符号差异为负的位置,哦,并将1推到前面x
以处理第一个元素已经为负的情况
这是一个相当自制的解决方案,检查一下
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
,尽管条件是立即检查。