结合scipy.optimize.brute网格和结果

时间:2016-05-05 18:13:41

标签: python arrays numpy scipy

我正在使用scipy的粗暴优化器来计算给定不同输入参数的函数的分数。为了分析结果,我想将得到的参数vs得分集转储到csv。

我目前所拥有的是来自粗略优化器的回报,来自文档的形式为:

返回:
x0:ndarray
一维数组,包含目标函数具有最小值的点的坐标。 (参见注1,返回哪一点。)
fval:float
点x0处的函数值 网格:元组
表示评估网格。它与x0的长度相同。 (当full_output为True时返回。)
Jout:ndarray
评估网格的每个点处的函数值,即Jout = func(* grid)。 (当full_output为True时返回。)

source

我希望将“网格”值与“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不符合要求。

任何提示或指示都会非常受欢迎,让我在过去几个小时内感到沮丧。

1 个答案:

答案 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]: