2016-06-28 10 views
0

指定された値、のいずれかの側の値を取得します。numpyの配列に、この例のためにのように見えるランダムに設けた私はnumpyの配列を持っている

理想的
a = [10, 8, 6, 4, 2, -2, -4, -6, -8, -10, 1] 

、この例では、値の間になるが - 10と10ですが、これは(上記のように)保証されるものではありません。

私は、そのようなことを、ゼロに最も近い2つの値をretriveしたい:理想的に私は2の値を返し、-2う

b = a[a > 0][-1] 

c = a[a < 0][0] 

。しかし、1の値はbのスライスに含まれ、iは1と-2の値を返します。

数値を即座に「次へ」ゼロに検索する方法はありますか?

私は常に配列を0に分割したいのですが、その配列はどのような長さでも構いませんし、配列内に正と負の値の不均等な数を持つことができます(つまり[5,4,3,2 、1、0、-1])

現実世界の例は次のとおりです。

enter image description here

私は黄色と緑の位置をしたいが、データが戻って横切るよう、代わりに青と緑の位置を返します-veから+ veまでゼロを超えて

+0

思想私は0のインデックス位置を使用して、そこから行くことができ、その後、私は0値を持っていないことに気付きました。 Iveはこれを反映するために投稿を編集しました(これもまた示唆した人のおかげで) –

+1

定義については不明です。第1に、第1の例では「1」が「0」に近い最も近い値であるべきではない。 2番目の例で '0'または' 1''-'を返すべきでしょうか? – Psidom

+0

最初の例、 '' [2、-2] ''、 '' [-10,1] ''、またはその両方で返されるものは何ですか?数字が単調に減少していると仮定できますか? – Tonechas

答えて

1

この機能は、ジョブを実行する必要があります。

import numpy as np 
def my_func(x): 
    left = np.where(x[:-1]>0)[0][-1] 
    right = 1 + np.where(x[1:]<0)[0][0] 
    return x[left], x[right] 

デモ:

>>> a = np.array([10, 8, 6, 4, 2, -2, -4, -6, -8, -10, 1]) 
>>> b = np.array([5, 4, 3, 2, 1, 0, -1]) 
>>> my_func(a) 
(2, -2) 
>>> my_func(b) 
(1, -1) 
+0

それは動作します。うまくいけば、それを這い上げて崩壊させるシナリオは他にないはずです。私はそれを試してみる –

関連する問題