2016-09-05 6 views
3

numpy浮動小数点配列(large_array、〜2e7要素)が多少あります。特定の最小値と最大値を超えてすべての要素を除外して、新しい配列を生成する必要があります。Python配列の要素を最小値と最大値ですばやくフィルタリングします

私はシンプルでこれを行うことができます。

import numpy as np 
large_array = np.random.uniform(0., 10000., 20000000) 
min_val, max_val = 500., 2700. 
arr_f = [] 
for _ in large_array: 
    if min_val <= _ <= max_val: 
     arr_f.append(_) 

を、それは本当に長い時間がかかります。

これをスピードアップするにはどうすればよいですか?

答えて

1

はこれを試してみてください。

In [18]: large_array.shape 
Out[18]: (20000000,) 

In [26]: new = large_array[(large_array >= min_val) & (large_array <= max_val)] 

In [27]: new 
Out[27]: array([ 814.24315891, 1611.53346093, 624.31833231, ..., 1999.08383068, 2212.9825087 , 1786.08963269]) 

In [28]: new.shape 
Out[28]: (4400475,) 
+0

ステップが欠落している私は信じています。これは 'True'要素の配列を返しますか? – Gabriel

+0

@Gabriel、 'Out [27]'をチェックする - 数値の配列を返します。この解決策を試しましたか? – MaxU

+0

うん、私の悪い。 In [26]のリストの始めに 'large_array'がありませんでした。これは確かに数倍高速です。ありがとうございました! – Gabriel

関連する問題