如何让MonteCarloSimulation返回标量结果之外的额外值?
让MonteCarloSimulation返回标量外额外值的实现方法
有两种可行的方案来实现你的需求,具体如下:
方案1:直接返回包含多值的元组/自定义结构
如果你的Monte Carlo框架允许模拟器返回非标量类型,这是最简洁的方式。在make_simulator中,将处理后的GaussianVector与标量结果打包成元组返回,后续可直接从模拟结果中拆分出两个值。
示例代码:
def make_simulator(): def simulator(): # 生成并处理GaussianVector gaussian_vec = GaussianVector(dim=5, mean=0, std=1) processed_vec = gaussian_vec.transform(...) # 你的处理逻辑 # 计算标量结果 scalar_result = processed_vec.norm() # 示例计算逻辑 # 返回处理后的值与标量结果的元组 return (processed_vec, scalar_result) return simulator # 运行模拟后,遍历结果拆分数据 sim_results = run_monte_carlo(make_simulator(), trials=1000) processed_vectors = [res[0] for res in sim_results] scalar_results = [res[1] for res in sim_results] # 后续同时使用两组数据进行计算
方案2:通过共享容器存储额外值
如果框架强制要求模拟器返回标量,可以借助线程/进程安全的共享容器来存储处理后的GaussianVector,确保并行模拟时数据不会冲突。
示例代码:
from multiprocessing import Manager def make_simulator(processed_container): def simulator(): gaussian_vec = GaussianVector(dim=5, mean=0, std=1) processed_vec = gaussian_vec.transform(...) scalar_result = processed_vec.norm() # 将处理后的值存入共享容器 processed_container.append(processed_vec) return scalar_result return simulator # 初始化共享容器 manager = Manager() processed_vectors = manager.list() # 创建模拟器并传入容器 simulator = make_simulator(processed_vectors) # 运行模拟 scalar_results = run_monte_carlo(simulator, trials=1000) # 此时processed_vectors与scalar_results中的数据一一对应
内容的提问来源于stack exchange,提问作者Shao Yuan Chew Chia
相关产品推荐
相关产品推荐

