gpt4 book ai didi

python-2.7 - 如何进一步向量化这个函数?

转载 作者:行者123 更新时间:2023-12-02 04:31:11 27 4
gpt4 key购买 nike

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

通过python实现的方式如下

import numpy as np
import math

def f(W, V, mu, sigma, q, w):
A = np.tile(1 + mu + math.sqrt(2)*sigma*q, (np.size(W), 1))
_W = (A.T * W).T
_W = w * V(np.ravel(_W)).reshape(np.size(W), len(q))
return np.sum(_W, axis=1)

函数的主要输入是W。参数 qw 始终相同。对于 W,函数被矢量化,如下例所示:

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 ])

如您所见,musigma 是固定的。我想知道是否可以进一步矢量化它,即 musigma 将是相同长度的数组。目前,我会这样做:

mu = [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])]

在我的真实示例中,列表要大得多,我对不同的 musigma 进行了多处理。但是,由于我多次这样做,我想知道我是否可以以矢量化形式更有效地为 musigma 做这件事。

最佳答案

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 你想扩展那个维度的形状来匹配其他数组。

您可以从那里继续:通过 tile 的咒语构建完整的 A 集,然后一次执行所有乘法(可能使用 einsum ,等等。这留给读者很多练习,但如果你一步一个脚印,我认为你可以做到。

关于python-2.7 - 如何进一步向量化这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com