我在寻找一种最快的方法来选择满足几个条件的numpy数组的元素。例如,假设我要从一个数组中选择0.2到0.8之间的所有元素。我通常会这样做:
the_array = np.random.random(100000)
idx = (the_array > 0.2) * (the_array < 0.8)
selected_elements = the_array[idx]
但是,这会创建两个与_数组大小相同的额外数组(一个用于_数组gt;0.2,一个用于_数组<;0.8)。如果数组很大,这可能会消耗大量内存。有什么办法绕过这个问题吗?所有内置的numpy函数(比如logical峎and)似乎在幕后做同样的事情。在
您可以为select实现一个定制的C调用。最基本的方法是通过
ctypes
实现。在select.c
编译为:
gcc -lm -shared select.c -o lib.so
在python方面:
选择.py
^{pr2}$不要期望这样一个普通的实现会有很大的加速,但是在C端,您可以选择添加
OpenMP
杂注来获得快速而肮脏的并行性,这可能会给您带来显著的提升。在同样,正如评论中提到的,numexpr可能是一种更快更简洁的方法,只需几行就可以完成所有这些。在
相关问题 更多 >
编程相关推荐