2017-05-02 10 views
0

は、私は、配列a=np.random.randn(4,2)を持っていると言うと、私は私がしたいならば、私はa[(a<0)] -=100.が、何を使用することになり、各要素から100を減算したい場合は100 から各負の要素を減算したいです100から各要素を減算します。どのように各要素をループせずに行うことができますか?減算要素であれば要素を満たす場合は、条件numpyの

+0

'〜15%の速度向上があることを見る - [<0]'? –

答えて

1

あなたはoutwherenp.ufunc秒の引数を使用することにより、@ Akiiinoの溶液中での一時的な配列を避けることができます。一般的には

​​

を、 ufunc(a, b, out, where)の意味はおおよそ:

out[where] = ufunc(a[where], b[where]) 

速度の比較:

In [1]: import numpy as np 
In [2]: a = np.random.randn(10000, 2) 
In [3]: b = a.copy() # so the that boolean mask doesn't change 

In [4]: %timeit a[b < 0] = 100 - a[b < 0] 
307 µs ± 1.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

In [5]: %timeit np.subtract(100, a, out=a, where=b < 0) 
260 µs ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

私たちは、[<0] = 100ここ

3

あなたは同じアイデアを使用することができます。

a[a<0] = 100 - a[a<0] 
関連する問題