2017-11-08 5 views
0

条件付きでnp.arrayからnp.arrayを構築したい。各値について、条件が満たされている場合は、1つの操作を適用する必要があります。私が書いた計算は、リストへの変換とリストへの変換のために醜いものです。リストに変換しないことでスピードの面で改善できるか?ナンシーアレイのスレッシュホールドアクセラレーション

THR = 1.0 
THR_REZ = 1.0/THR**2 

def thresholded_function(x): 
    if x < THR: 
    return THR_REZ 
    else: 
    return 1.0/x**2 

rad2 = .....some_np_array..... 
rez = np.array([threshold(r2) for r2 in rad2]) 

答えて

1

使用np.where -

np.where(x < THR, THR_REZ, 1.0/x**2) # x is input array 

サンプル実行 -

In [267]: x = np.array([3,7,2,1,8]) 

In [268]: THR, THR_REZ = 5, 0 

In [269]: np.where(x < THR, THR_REZ, 1.0/x**2) 
Out[269]: array([ 0.  , 0.02040816, 0.  , 0.  , 0.015625 ]) 

In [270]: def thresholded_function(x, THR, THR_REZ): 
    ...: if x < THR: 
    ...:  return THR_REZ 
    ...: else: 
    ...:  return 1.0/x**2 

In [272]: [thresholded_function(i,THR, THR_REZ) for i in x] 
Out[272]: [0, 0.02040816326530612, 0, 0, 0.015625] 
関連する問題