我正在嘗試改進我正在處理的算法的處理速度。在嘗試使用多處理池和映射在所有CPU核心上有效地分配工作負載之前,我想要矢量化(如果可能的話)此循環。我該如何使用numpy進行矢量化,而+(2x for)嵌套循環?
這裏是一個例子。
v = [1,2,3,4,5,6,7,8,9,10]
w = [-3,-2,-1,0,1,2,3]
u = sorted(w, reverse=True)
i = 0
check = 0
while v[i] != v[-1]:
if check == 0:
for k in range(len(w)):
if (v[i] < w[k] & v[i+1] >= w[k]) or (v[i] > w[k] & v[i+1] <= w[k]):
do_somthing()
check = 1
break
i = i+1
if check == 1:
for k in range(len(u)):
if (v[i] <= u[k] & v[i-1] > u[k]) or (v[i] >= u[k] & v[i-1] < u[k]):
do_something_else()
check = 0
break
i = i+1
該示例中的數組值完全是隨機的。 V至少包含2000個元素,而w的大小始終是固定的。
是'w'排序,這樣'u'和'w'互爲鏡像? –
是的,w排序爲lowest_value - > highest_value。 – ilpomo
爲什麼不讓這個函數接受'ndarray''v'和'w'參數。然後用'numba.jit'編譯函數。對於可以不依賴本地CPython數據類型的特殊循環操作,'numba.jit'幾乎總是您最好的選擇,並且通常比矢量化的numpy版本更快,同時允許您仍然可以在一種可讀的方式,不需要混淆的矢量操作。 – ely