Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何使用SciPy优化三维阵列_Python_Arrays_Numpy_Optimization_Scipy - Fatal编程技术网

Python 如何使用SciPy优化三维阵列

Python 如何使用SciPy优化三维阵列,python,arrays,numpy,optimization,scipy,Python,Arrays,Numpy,Optimization,Scipy,我想优化一个三维阵列。我已按如下方式初始化阵列: thresholds = numpy.full((20, 10, 12), 1/9999, ctypes.c_float).ctypes.data_as (ctypes.POINTER(((ctypes.c_float * 20) * 10) * 12)).contents 我还制作了一个CostFunction,其中参数为“thresholds”: 我想使用scipy中的de function minimize最小化

我想优化一个三维阵列。我已按如下方式初始化阵列:

thresholds = numpy.full((20, 10, 12), 1/9999, ctypes.c_float).ctypes.data_as
             (ctypes.POINTER(((ctypes.c_float * 20) * 10) * 12)).contents
我还制作了一个CostFunction,其中参数为“thresholds”:

我想使用scipy中的de function minimize最小化costfunction的输出,如下所示:

result = minimize(CostFunction, thresholds, method='Nelder-Mead')
CostFunctionQuadratic(thresholds)
但我有这些错误: TypeError:应为c_float_Array_20_Array_10_Array_12实例,得到numpy.ndarray

当我在没有优化的情况下调用costfunction时,如下所示:

result = minimize(CostFunction, thresholds, method='Nelder-Mead')
CostFunctionQuadratic(thresholds)
它起作用了。但在优化过程中,我犯了一个错误。为什么会这样?我想阵列还是一样的?还是我用一个三维数组错误地调用了最小化函数? 我的numpy版本是1.20.3,我的scipy版本是1.6.3,我在PyCharm工作

编辑

这是整个回溯:

Traceback (most recent call last):
  File "C:/Users/Name/PycharmProjects/OptimalisatiePreset/Main.py", line 53, in <module>
    result = minimize(CostFunctionLinear, thresholds, method='Nelder-Mead')
  File "C:\Users\Name\PycharmProjects\OptimalisatiePreset\venv\lib\site-packages\scipy\optimize\_minimize.py", line 608, in minimize
    return _minimize_neldermead(fun, x0, args, callback, **options)
  File "C:\Users\Name\PycharmProjects\OptimalisatiePreset\venv\lib\site-packages\scipy\optimize\optimize.py", line 723, in _minimize_neldermead
    fsim[k] = func(sim[k])
  File "C:\Users\Name\PycharmProjects\OptimalisatiePreset\venv\lib\site-packages\scipy\optimize\optimize.py", line 461, in function_wrapper
    return function(*(wrapper_args + args))
  File "C:/Users/Name/PycharmProjects/OptimalisatiePreset/Main.py", line 40, in CostFunctionQuadratic
    settings = Settings(thresholds)
  File "C:\Users\Name\PycharmProjects\OptimalisatiePreset\Variables.py", line 88, in Settings
    Settings.thresholds = aThresholds
TypeError: expected c_float_Array_20_Array_10_Array_12 instance, got numpy.ndarray
回溯(最近一次呼叫最后一次):
文件“C:/Users/Name/PycharmProjects/OptimalisatiePreset/Main.py”,第53行,在
结果=最小化(成本函数线性,阈值,方法='Nelder-Mead')
文件“C:\Users\Name\PycharmProjects\optimisatiepreset\venv\lib\site packages\scipy\optimize\\u minimize.py”,最小化中第608行
return _minimize_neldermead(fun、x0、args、callback、**选项)
文件“C:\Users\Name\PycharmProjects\optimisatiepreset\venv\lib\site packages\scipy\optimize\optimize.py”,第723行,在neldermead中
fsim[k]=func(sim[k])
文件“C:\Users\Name\PycharmProjects\optimisatiepreset\venv\lib\site packages\scipy\optimize\optimize.py”,第461行,在函数包装器中
返回函数(*(包装器参数+参数))
文件“C:/Users/Name/PycharmProjects/OptimalisatiePreset/Main.py”,第40行,在CostFunction中
设置=设置(阈值)
文件“C:\Users\Name\PycharmProjects\OptimalisatiePreset\Variables.py”,第88行,在设置中
Settings.thresholds=aThresholds
TypeError:应为c_float_Array_20_Array_10_Array_12实例,获取numpy.ndarray

您对定义
阈值的方式有何期望?检查
类型(阈值)
类型(阈值)
。你有没有理由不把它定义为
numpy.full((20,10,12),1/9999,numpy.float32)
?type(阈值)给出:“Types.c\u float\u Array\u 20\u Array\u 10\u Array\u 12”和type(阈值)给我:“浮点”。我没有使用NoPy.FulAT32,因为我的COSTEngle中的DLL是C++ DLL。所以参数必须是cType。我误解了正在发生的事情。你应该已经发布了完整的回溯。在代码>最小值()/代码>中似乎发生了什么:<代码>阈值< /C> >被转换为<代码> NDARLY< /COD>对象(<代码>类型)。(aThresholds)
确认了这一点),当您尝试将其传递给
dll.DetermineClass()时,会出现一个错误
。因此,在成本函数中,您必须将数组值转换为c_浮点数组。我添加了整个回溯。您知道现在发生了什么吗?在
costfunction
开始时,检查
aThresholds
的性质,它从
minimize
获得的测试值。注意形状和数据类型。