Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中用于灵敏度分析的SAlib库出错_Python_Python 2.7_Statistics_Static Analysis - Fatal编程技术网

python中用于灵敏度分析的SAlib库出错

python中用于灵敏度分析的SAlib库出错,python,python-2.7,statistics,static-analysis,Python,Python 2.7,Statistics,Static Analysis,我试图用索波尔的方法进行敏感性分析。我总是遇到我无法解决的错误。代码和结果如下所示。输入变量范围在问题中确定,模型输出保存在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':

我试图用索波尔的方法进行敏感性分析。我总是遇到我无法解决的错误。代码和结果如下所示。输入变量范围在问题中确定,模型输出保存在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)

结果=错误消息
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/dist packages/spyderlib/widgets/externalshell/sitecustomize.py”,第540行,在runfile中
execfile(文件名、命名空间)
文件“/home/omar/Desktop/untitled0.py”,第58行,在
Si=sobol.analyze(问题,Y,打印到控制台=True)
文件“/home/omar/SALib/SALib/analyze/sobol.py”,第81行,在analyze中
A、 B,AB,BA=单独的输出值(Y,D,N,计算二阶)
文件“/home/omar/SALib/SALib/analyze/sobol.py”,第164行,在单独的输出值中
AB[:,j]=Y[(j+1):Y.尺寸:步长]
ValueError:无法将输入数组从形状(1000,14)广播到形状(14000)

Y的尺寸是多少?要使用sobol.analyze函数,Y必须是列向量。在这种情况下,您似乎在传递矩阵而不是向量,这似乎是问题所在

此外,如果您正在计算二阶指数,那么您的样本量将为N(k+2),或者在本例中为32000。如果模型仅返回14000个值,则会导致数组维度出现另一个问题

    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)