ошибка с помощью библиотеки SAlib для анализа чувствительности в python

61
4

Я пытаюсь выполнить анализ чувствительности с использованием метода Собола. Я всегда получаю ошибку, которую я не могу решить. код и результат приведены ниже. диапазоны входных переменных идентифицируются в задаче, а выходные данные модели сохраняются в файле sens_out.txt

from SALib.sample import saltelli
from SALib.analyze import sobol
from SALib.test_functions import Ishigami
import numpy as np
import subprocess

problem = {
'num_vars': 30,
'names': ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10',
'x11', 'x12', 'x13', 'x14', 'x15', 'x16', 'x17', 'x18', 'x19',
'x20', 'x21', 'x22', 'x23', 'x24', 'x25', 'x26', 'x27', 'x28',
'x29', 'x30'],
'bounds': [[2, 6],
[20, 30],
[600, 900],
[800, 1300],
[0.01, 0.05],
[0.1, 0.2],
[30, 35],
[0.0015, 0.003],
[0.001, 0.0015],
[0.50, 0.70],
[0.50, 0.70],
[0.50, 0.70],
[0.25, 0.50],
[0.0, 0.25],
[0.4, 0.5],
[0.5, 0.7],
[0.5, 0.7],
[0.5, 0.7],
[0.55, 0.7],
[0.6, 0.7],
[0.013, 0.017],
[0.027, 0.032],
[0.17, 0.21],
[0.007, 0.012],
[0.01, 0.016],
[0.02, 0.04],
[0.8, 1.2],
[2.0, 2.5],
[8, 12],
[90, 110]]
}

param_values = saltelli.sample(problem, 1000, calc_second_order=True)

#np.savetxt("/home/omar/Desktop/param_values.txt", param_values)

Y = np.loadtxt("/home/omar/Desktop/sens_out.txt", float)

Si = sobol.analyze(problem, Y, print_to_console=True)

Результат = сообщение об ошибке

    Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "/home/omar/Desktop/untitled0.py", line 58, in <module>
Si = sobol.analyze(problem, Y, print_to_console=True)
File "/home/omar/SALib/SALib/analyze/sobol.py", line 81, in analyze
A,B,AB,BA = separate_output_values(Y, D, N, calc_second_order)
File "/home/omar/SALib/SALib/analyze/sobol.py", line 164, in separate_output_values
AB[:, j] = Y[(j + 1):Y.size:step]
ValueError: could not broadcast input array from shape (1000,14) into shape (14000)

спросил(а) 2021-01-28T00:07:35+03:00 2 месяца, 2 недели назад
1
Решение
61

Каково измерение Y? Чтобы использовать функцию sobol.analyze, Y должен быть вектором столбца. В этом случае кажется, что вы передаете матрицу, а не вектор, что, похоже, является проблемой.

Также, если вы вычисляете индексы второго порядка, ваш размер выборки будет N (k + 2), или в этом случае 32 000. Если модель возвращает только 14 000 значений, это вызовет еще одну проблему с размером массива.

ответил(а) 2021-01-28T00:07:35+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема