Ниже код работает так медленно. Я попытался использовать numpy.argwhere
вместо «оператора if» для ускорения кода, и я получил довольно эффективный результат, но он все еще очень медленный. Я также пробовал numpy.frompyfunc
и numpy.vectorize
, но потерпел неудачу. Что бы вы посоветовали для ускорения кода ниже?
import numpy as np
import time
time1 = time.time()
n = 1000000
k = 10000
velos = np.linspace(-1000, 1000, n)
line_centers = np.linspace(-1000, 1000, k)
weights = np.random.random_sample(k)
rvs = np.arange(-60, 60, 2)
m = len(rvs)
w = np.arange(10)
M = np.zeros((n, m))
for l, lc in enumerate(line_centers):
vi = velos - lc
for j in range(m - 1):
w = np.argwhere((vi < rvs[j + 1]) & (vi > rvs[j])).T[0]
M[w, j] = weights[l] * (rvs[j + 1] - vi[w]) / (rvs[j + 1] - rvs[j])
M[w, j + 1] = weights[l] * (vi[w] - rvs[j]) / (rvs[j + 1] - rvs[j])
time2 = time.time()
print(time2 - time1)
РЕДАКТИРОВАТЬ: Размер массива M
был неправильным. Я починил это.