如何进一步矢量化这个功能?

时间:2018-02-06 13:17:48

标签: python-2.7 numpy

我有以下数学公式 enter image description here

以下列方式通过python实现

W

该函数的主要输入是q。参数wW始终相同。对于f(np.asarray([100, 10320, 103]), np.log, 0.03, 0.1, np.polynomial.hermite.hermgauss(10)[0], np.polynomial.hermite.hermgauss(10)[1]) Out: array([ 8.20636769, 16.42464925, 8.2587593 ]) ,该函数是矢量化的,如以下示例所示:

mu

如您所见,sigmamu已修复。我想知道是否可以进一步对其进行矢量化,即sigmamu = [0.03, 0.05, 0.1] sigma = [0.1, 0.12, 0.20] [f(np.asarray([100, 10320, 103]), np.log, mu[i], sigma[i], np.polynomial.hermite.hermgauss(10)[0], np.polynomial.hermite.hermgauss(10)[1]) for i in range(0, len(mu))] Out: [array([ 8.20636769, 16.42464925, 8.2587593 ]), array([ 8.23711733, 16.4553989 , 8.28950895]), array([ 8.30043707, 16.51871863, 8.35282868])] 将是相同长度的数组。目前,我会这样做:

mu

在我的实例中,列表要大得多,我为不同的sigmamu进行了多处理。但是,由于我多次这样做,我想知道我是否能够以sigmaos.path.getctime()的矢量化形式更有效地完成这项工作。

1 个答案:

答案 0 :(得分:0)

musigma的唯一用途是构建A

1 + mu[0] + math.sqrt(2)*sigma[0]*q

要使用musigma而不是标量的数组,您可以一次构建所有A

1 + mu + math.sqrt(2)*sigma*q[:,np.newaxis]

这会为您提供一个形状为(10, 3)的数组;第二个维度与len(mu)len(sigma)匹配,因为newaxis告诉NumPy您要扩展该维度中的形状以匹配其他数组。

你可以从那里继续:用A的咒语构建全套tile,然后一次完成乘法(可能使用einsum,依此类推。这对读者来说是一种练习,但如果你一步一步,我认为你可以做到。