我有一个很大的numpy
浮点数组(large_array
,~2e7元素)。我需要生成一个新数组,过滤掉超出某些最小值和最大值的所有元素。
我可以用一个简单的方法来做到这一点:
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(_)
但这需要很长时间。
如何加快速度?
答案 0 :(得分: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,)