2

Matlabの数値の行列を使用して、一連の正の数の後の最初の負の数をどのように見つけますか?

これまでのところ、私が思いついた唯一の答えは、最初の負の数をチェックするループを作成し、それを記録してから、最初の正の数を探し、そこで配列を切り捨てて、最初からやり直すことでした。これを行うためのベクトル化された方法はありますか?

たとえば、私はを持っていますx = [ -1 -5 -2 3 4 8 -2 -3 1 9]、そして私はこの関数またはスクリプトが私にの配列を与えることを望みますy = [1 7]

4

2 に答える 2

3

また

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

つまり、連続する要素間の符号の差が負である場所を見つけます。最初の要素がすでに負である場合に対処するためxに、前に1を押します。x

于 2013-01-05T16:51:50.197 に答える
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、条件はすぐにチェックされますが、が表示されます。

于 2013-01-05T15:38:02.553 に答える