我正在使用scipy的粗暴优化器来计算给定不同输入参数的函数的分数。为了分析结果,我想将得到的参数vs得分集转储到csv。
我目前所拥有的是来自粗略优化器的回报,来自文档的形式为:
返回:
x0:ndarray
一维数组,包含目标函数具有最小值的点的坐标。 (参见注1,返回哪一点。)
fval:float
点x0处的函数值
网格:元组
表示评估网格。它与x0的长度相同。 (当full_output为True时返回。)
Jout:ndarray
评估网格的每个点处的函数值,即Jout = func(* grid)。 (当full_output为True时返回。)
我希望将“网格”值与“Jout”参数组合在一起:
[参数1,参数2,参数3,Score1]
[参数1,参数2,参数3,Score2]
...
粗暴的示例输出是:
(array([ 0., 0., 0.]), -0.96868449202047968, array([[[[0, 0],
[0, 0]],
[[1, 1],
[1, 1]]],
[[[0, 0],
[1, 1]],
[[0, 0],
[1, 1]]],
[[[0, 1],
[0, 1]],
[[0, 1],
[0, 1]]]]), array([[[-0.96868449, -0.96868449],
[-0.96868449, -0.96868449]],
[[-0.96868449, -0.96868449],
[-0.96868449, -0.96868449]]]))
我不能,因为我的生活中弄清楚如何将上面索引2中的数组(“网格”)与索引3中的数组(“Jout”)组合在一起。我的np数组foo不符合要求。
任何提示或指示都会非常受欢迎,让我在过去几个小时内感到沮丧。
答案 0 :(得分:1)
所以你想在grid
和(2,2,2)矩阵Jout
中堆叠三个(2,2,2)矩阵? np.stack可能是你所需要的,即:
In [26]: a = np.array([[[[0, 0],
...: [0, 0]],
...:
...: [[1, 1],
...: [1, 1]]],
...:
...:
...: [[[0, 0],
...: [1, 1]],
...:
...: [[0, 0],
...: [1, 1]]],
...:
...:
...: [[[0, 1],
...: [0, 1]],
...:
...: [[0, 1],
...: [0, 1]]]])
In [27]: b = np.array([[[-0.96868449, -0.96868449],
...: [-0.96868449, -0.96868449]],
...:
...: [[-0.96868449, -0.96868449],
...: [-0.96868449, -0.96868449]]])
In [28]: np.stack([*a, b], -1)
Out[28]:
array([[[[ 0. , 0. , 0. , -0.96868449],
[ 0. , 0. , 1. , -0.96868449]],
[[ 0. , 1. , 0. , -0.96868449],
[ 0. , 1. , 1. , -0.96868449]]],
[[[ 1. , 0. , 0. , -0.96868449],
[ 1. , 0. , 1. , -0.96868449]],
[[ 1. , 1. , 0. , -0.96868449],
[ 1. , 1. , 1. , -0.96868449]]]])
In [29]: