2016-05-05 3 views
1

Я использую оптимизатор перебора scipy, чтобы вычислить оценки функции с учетом разных входных параметров. Чтобы проанализировать результаты, я хочу сбросить полученный параметр vs score sets в csv.Сочетание scipy.optimize.brute сетки и результатов

То, что я в настоящее время является возвращение из грубой оптимизатора, который из Docs имеет вид:

Возвращает:
x0: ndarray
A 1-D массив, содержащий координаты точки, в что целевая функция имела минимальное значение. (См. Примечание 1, для которого возвращается точка.)
fval: float
Значение функции в точке x0.
сетка: кортеж
Представление оценочной сетки. Он имеет ту же длину, что и x0. (Возвращается, когда full_output имеет значение True.)
Jout: ndarray
Значения функций в каждой точке оценочной сетки, то есть Jout = func (* grid). (Возвращается, когда full_output является True.)

source

Я хочу, чтобы объединить значение "сетки" с параметром "Jout" в виде:

[Param1, Param2, Param3, Score1]
[Param1, Param2, Param3, 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

Итак, вы хотите уложить три (2,2,2) матрицы в grid и матрицу (2,2,2) Jout? 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

Awesome, это заставляет меня большую часть пути там, я думаю, но как я могу преобразовать, что конечный результат в виде плоской, то есть: [[0,0, 0, -0,96], [0,0,1, -0,96]] – ponderinghydrogen

+0

Посмотрите на 'numpy.reshape'. – tjollans

+0

Редактировать: нашел [здесь] (http://stackoverflow.com/questions/13990465/3d-numpy-array-to-2d) - спасибо @tjollans! – ponderinghydrogen

Смежные вопросы