gpt4 book ai didi

python - NumPy 中的多处理

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:14 25 4
gpt4 key购买 nike

我在网上搜索了我的问题的任何解决方案,但没有真正找到任何对我有帮助的东西。我的问题是我希望通过实现多处理来加速我的程序。 getSVJJPrice 函数相当快。但是,K 的大小约为 1000,这使得整个代码非常慢。因此我想知道是否有办法并行化 for 循环?代码如下。

def func2min(x,S,expiry,K,r,prices,curr):
bid = prices[:,0]
ask = prices[:,1]

C_omega = [0]*len(K)
w = [0]*len(K)

for ind, k in enumerate(K):
w[ind] = 1/np.abs(bid[ind] - ask[ind])
C_omega[ind] = getSVJJPrice(x[0],(x[1] + x[0]**2)/(2*x[2]),
x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],S[ind],k,r[ind],expiry[ind],
curr[ind])

right = np.sum(w * (np.subtract(C_omega, np.mean(prices,axis=1)))**2)

print right
#if right < 10:
# print '\n \n func = ', right

if math.isnan(right):
right = 1e12

return right

向调查此问题的任何人表示感谢!

最好的问候,

维克多

最佳答案

似乎 multiprocessing.Pool 可能适合您的情况,因为您正在遍历 K 中的每个元素,而 K 似乎就像它只是您代码中的一维数组。

基本上,您首先必须编写一个执行循环的函数,在我的示例 parallel_loop 中,然后您必须将问题拆分为单独的 block ,在这种情况下,您只需拆分 K分成整数个nprocs

然后你可以使用pool.map对每个 block 并行执行循环,结果将按照 block 的顺序收集回来,这与你原来的顺序相同K 因为我们没有重新排列任何东西,只是执行切片。然后,您只需将所有部分放回 wC_omega 即可。

import numpy as np
from multiprocessing import Pool

def parallel_loop(K_chunk):
C_omega_chunk = np.empty(len(K_chunk)
w_chunk = np.empty(len(K_chunk))

for ind, k in enumerate(K_chunk)
w_chunk[ind] = 1/np.abs(bid[ind] - ask[ind])
C_omega_chunk[ind] = getSVJJPrice(x[0],(x[1] + x[0]**2)/(2*x[2]),
x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],S[ind],k,r[ind],expiry[ind],
curr[ind])

return (w_chunk, C_omega_chunk)

def func2min(x,S,expiry,K,r,prices,curr,nprocs):
bid = prices[:,0]
ask = prices[:,1]

K = np.array(K)

K_chunks = [K[n * len(K) // nprocs : (n + 1) * len(K) // nprocs] for n in range(nprocs)]
pool = Pool(processes=nprocs)
outputs = pool.map(parallel_loop, K_chunks)

w, C_omega = (np.concatenate(var) for var in zip(*outputs))

right = np.sum(w * (np.subtract(C_omega, np.mean(prices,axis=1)))**2)

print right
#if right < 10:
# print '\n \n func = ', right

if math.isnan(right):
right = 1e12

return right

因为我没有示例数据集,所以我不能确定上面的示例是否会按原样工作,但我认为它应该让您大致了解它是如何工作的。

关于python - NumPy 中的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357295/

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