【发布时间】:2018-01-02 06:18:43
【问题描述】:
我正在尝试运行 3 次跳盆模拟,并将 x 和 f(x) 的每个元组保存到 1x2 的数组中,下面的代码是我迄今为止最好的尝试。我不需要关于结果的详细信息,只需要数字元组,我怎样才能以一种我也可以将它们用于进一步处理的方式获得这样的数组(例如,选择最少的不同运行)
from math import *
from math import ceil
from math import floor
import time
from decimal import *
import numpy as np
from scipy.optimize import basinhopping
minimizer_kwargs = {"method": "BFGS"}
def f(x):
b = 5306246123
estimator1=(sqrt(b)+x[0])
estimator2=(sqrt(b)+x[1])
d=abs(estimator1*estimator2-b)
return d
b = 5306246123
results = []
for x in range(3): results.append(basinhopping(f, [1,1], minimizer_kwargs=minimizer_kwargs,
niter=1000, stepsize=sqrt(sqrt(b))))
print(results)
(1/3) 示例输出的一部分(例如,我只需要 -6403.48941568、7020.65333737 和此元组的其他 2 个实例):
[ fun: 2.86102294921875e-06
lowest_optimization_result: fun: 2.86102294921875e-06
hess_inv: array([[ 0.13347587, -0.13347587],
[-0.13347587, 0.13347587]])
jac: array([ 79872., 66432.])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 463
nit: 2
njev: 113
status: 2
success: False
x: array([-6403.48941568, 7020.65333737])
message: ['requested number of basinhopping iterations completed successfully']
【问题讨论】:
-
不太明白,结果是什么结构?如果结果是字典,你不能只做
results.append(basinhopping(...)['x'])吗? -
[r.x for r in results]怎么样?还是results.append(basinhopping(...).x)? -
user2464424,谢谢它的工作,现在输出如下: [array([-4813.75229033, 5154.36866417]), array([ -9068.45177035, 10357.92460721]), array([ 7749.21249931, -7078) ] 如何单独访问这些数组或处理(即排序)它们?
-
@msalperen 您已将它们放入列表中,因此可以像往常一样通过索引访问它们,因此使用
results[0]、results[1]或results[2]。如果您想逐步查看结果,请执行for item in results: -
检查此问题以对列表进行排序:stackoverflow.com/questions/4174941/…
标签: python arrays optimization scipy