【发布时间】:2021-10-31 12:13:27
【问题描述】:
有没有办法向量化这个表达式?
import numpy as np
def phase(f, dt=1):
c = [f[0]] + [fi*dt for fi in f[1:]]
s=0
x = []
for ci in c:
s = (s+ci)%(2*np.pi)
x.append(s)
return x
f 是一个任意长度的数组,dt 是一个常数。
代码:
- 将整个向量
f但第一个实例乘以dt。 - 返回部分和,即
output[i] = sum(c[0:i])模2pi。
关于如何加快速度的任何想法? 谢谢!
【问题讨论】:
-
你试过
numba吗? -
您可以通过使用列表理解而不是
for循环:x=[(s + ci) % (2 * np.pi) for ci in c]来获得较小的性能提升。你也同意s在所有迭代中都不同这一事实吗? -
就我个人而言,我会使用
for idx, ci in enumerate(c)编写这个 for 循环,这样您就可以跳过单独定义s并可能在调试中节省一些神经细胞。
标签: python performance loops vectorization