Python 这个可以用numpy矢量化吗?

Python 这个可以用numpy矢量化吗?,python,numpy,Python,Numpy,我有这个函数,我想知道是否有办法将它矢量化,因为我在这个函数上运行了很多循环,它变得非常慢。w、 x、y、z和n是常数,而input_vec是长度为n的向量 def calc_v(w, x, y, z, input_vec, n): v = np.empty(n) v[0] = 1 for i in range(1, n): past_v = v[i - 1] past_input = input_vec[i - 1]

我有这个函数,我想知道是否有办法将它矢量化,因为我在这个函数上运行了很多循环,它变得非常慢。w、 x、y、z和n是常数,而input_vec是长度为n的向量

def calc_v(w, x, y, z, input_vec, n):

    v = np.empty(n)

    v[0] = 1

    for i in range(1, n):
        past_v = v[i - 1]
        past_input = input_vec[i - 1]

        # UCL
        part1 = (1 / past_v) * (x * (y - past_v) - ((w*w) / 2)) * z
        part2 = w * (1 / math.sqrt(past_v)) * math.sqrt(z) * past_input

        v[i] = past_v * exp(part1 + part2)

    return v

考虑到依赖性,可能很难进行矢量化,但是
numba
可能有助于预计算一些术语,如
math.sqrt(z)
,等等。不幸的是,这不会给我所需的速度。如果不能被向量化,我需要把它移植到C++中,使用VECRTHOSSWORD <代码> NUBA基本上是C(性能接近它)。所以,看看那里。Numba肯定会让这个功能更快,谢谢!您可能可以在
numpy
中重写它,但通过预先计算
partial1
partial2
,您将使用大约三倍于此代码的内存。如果您需要它(并提供一些测试输入和输出),我可能会尝试一下。考虑到依赖性,可能很难对其进行矢量化,但是
numba
可能有助于对一些术语进行预计算,如
math.sqrt(z)
,等等。不幸的是,这不会给我所需的速度。如果不能被向量化,我需要把它移植到C++中,使用VECRTHOSSWORD <代码> NUBA基本上是C(性能接近它)。所以,看看那里。Numba肯定会让这个功能更快,谢谢!您可能可以在
numpy
中重写它,但通过预先计算
partial1
partial2
,您将使用大约三倍于此代码的内存。如果您需要它(并提供一些测试输入和输出),我可能会尝试一下。