以下列方式通过python实现
W
该函数的主要输入是q
。参数w
和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 ])
,该函数是矢量化的,如以下示例所示:
mu
如您所见,sigma
和mu
已修复。我想知道是否可以进一步对其进行矢量化,即sigma
和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])]
将是相同长度的数组。目前,我会这样做:
mu
在我的实例中,列表要大得多,我为不同的sigma
和mu
进行了多处理。但是,由于我多次这样做,我想知道我是否能够以sigma
和os.path.getctime()
的矢量化形式更有效地完成这项工作。
答案 0 :(得分:0)
mu
和sigma
的唯一用途是构建A
:
1 + mu[0] + math.sqrt(2)*sigma[0]*q
要使用mu
和sigma
而不是标量的数组,您可以一次构建所有A
:
1 + mu + math.sqrt(2)*sigma*q[:,np.newaxis]
这会为您提供一个形状为(10, 3)
的数组;第二个维度与len(mu)
和len(sigma)
匹配,因为newaxis
告诉NumPy您要扩展该维度中的形状以匹配其他数组。
你可以从那里继续:用A
的咒语构建全套tile
,然后一次完成乘法(可能使用einsum
,依此类推。这对读者来说是一种练习,但如果你一步一步,我认为你可以做到。