я пытаюсь ускорить следующий код:
import time
import numpy as np
np.random.seed(10)
b=np.random.rand(10000,1000)
def f(a=1):
tott=0
for _ in range(a):
q=np.array(b)
t1 = time.time()
for i in range(len(q)):
for j in range(len(q[0])):
if q[i][j]>0.5:
q[i][j]=1
else:
q[i][j]=-1
t2=time.time()
tott+=t2-t1
print(tott/a)
Как видите, в основном func - это итерация в двойном цикле. Итак, я попытался использовать np.nditer
, np.vectorize
и map
вместо него. Если дает некоторое ускорение (например, 4-5 раз, кроме np.nditer
), но! с np.where(q>0.5,1,-1)
ускорение почти в 100 раз.
Как я могу перебирать массивы так быстро, как это делает np.where
? И почему это намного быстрее?