下面的代码运行如此缓慢。我尝试使用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
的大小不正确。我修好了它。 最佳答案
这似乎是c ++接口可以派上用场的情况。使用Pybind11,您可以创建将numpy数组作为参数的c ++函数,对其进行处理并将其返回给python。这样可以加快循环速度。看看吧!