【问题标题】:Combining scipy.optimize.brute grid and results结合 scipy.optimize.brute 网格和结果
【发布时间】:2016-08-31 15:32:00
【问题描述】:

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

我目前拥有的是来自蛮力优化器的返回,来自文档的形式为:

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

source

我想将“grid”值与“Jout”参数组合为:

[参数 1,参数 2,参数 3,分数 1]
[参数 1、参数 2、参数 3、分数 2]
...

brute 的一个示例输出是:

     (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 达不到标准。

任何提示或指示将不胜感激,并缓解我过去几个小时沮丧的大脑。

【问题讨论】:

    标签: python arrays numpy scipy


    【解决方案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]: 
    

    【讨论】:

    • 太棒了,我想这让我大部分时间都在那里,但是我怎样才能将最终输出转换为更扁平的形式,即:[[0,0,0,-0.96],[ 0,0,1,-0.96]]
    • 看看numpy.reshape
    • 编辑:找到它here - 谢谢@tjollans!
    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2021-03-08
    • 2016-03-07
    • 2015-01-15
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多