Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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.optimize.leastsq错误不是浮点数组_Python_Numpy_Error Handling_Scipy_Mathematical Optimization - Fatal编程技术网

Python scipy.optimize.leastsq错误不是浮点数组

Python scipy.optimize.leastsq错误不是浮点数组,python,numpy,error-handling,scipy,mathematical-optimization,Python,Numpy,Error Handling,Scipy,Mathematical Optimization,这是我的密码 import os import sys import numpy as np import scipy from scipy.optimize import leastsq def peval (inp_mat,p): m0,m1,m2,m3,m4,m5,m6,m7 = p out_mat = np.array(np.zeros(inp_mat.shape,dtype=np.float32)) mid = inp_mat.shape[0]/2

这是我的密码

import os
import sys
import numpy as np
import scipy
from scipy.optimize import leastsq


def peval (inp_mat,p):
    m0,m1,m2,m3,m4,m5,m6,m7 = p
    out_mat = np.array(np.zeros(inp_mat.shape,dtype=np.float32))
    mid = inp_mat.shape[0]/2
    for xy in range(0,inp_mat.shape[0]):
        if (xy<(inp_mat.shape[0]/2)):
            out_mat[xy] = ( (  (inp_mat[xy+mid]*m0)+(inp_mat[xy]*m1)+ m2 ) /( (inp_mat[xy+mid]*m6)+(inp_mat[xy]*m7)+1 ) )
        else:
            out_mat[xy] = ( (  (inp_mat[xy]*m3)+(inp_mat[xy-mid]*m4)+ m5 ) /( (inp_mat[xy]*m6)+(inp_mat[xy-mid]*m7)+1 ) )
    return np.array(out_mat)

def residuals(p, out_mat, inp_mat):
    m0,m1,m2,m3,m4,m5,m6,m7 = p
    err=np.array(np.zeros(inp_mat.shape,dtype=np.float32))
    if (out_mat.shape == inp_mat.shape):
        for xy in range(0,inp_mat.shape[0]):
            err[xy] =  err[xy]+ (out_mat[xy] -inp_mat[xy])
        return np.array(err)




f = open('/media/anilil/Data/Datasets/repo/txt_op/vid.txt','r')
x = np.loadtxt(f,dtype=np.int16,comments='#',delimiter='\t')
nof = x.shape[0]/72 # Find the number of frames
x1 = x.reshape(-1,60,40)
x1_1= x1[0,:,:].flatten()
x1_2= x1[1,:,:].flatten()

x= []
y= []

for xy in range(1,50,1):
    y.append(x1[xy,:,:].flatten())
    x.append(x1[xy-1,:,:].flatten())

x=np.array(x,dtype=np.float32)
y=np.array(y,dtype=np.float32)
length =  x1_1.shape#initail guess
p0 = np.array([1,1,1,1,1,1,1,1],dtype=np.float32)

abc=leastsq(residuals, p0,args=(y,x))
print ('Size of first matrix is '+str(x1_1.shape))
print ('Size of first matrix is '+str(x1_2.shape))

print ("Done with program")

leastsq
要求从
residuals
函数返回1D数组

当前,计算整个图像的残差,并将其作为二维数组返回

简单的解决方法是展平残差数组(将2D数组转换为一维数组)

因此,与其返回

return np.array(err)
改为这样做

return err.flatten()

请注意,
err
已经是一个numpy数组,因此不需要在返回之前进行强制转换(我想这是在您尝试调试它时滑入的!)

您可以共享您正在使用的数据或至少是其中的一个子集吗?添加您想要的数据稍微晚了一点,Simon速度更快:您确实只需要替换
np.array(err)
通过例如
np.ravel(err)
err.flatte()
运行。同时检查问题并尝试。它不会抛出任何错误,但p0不会改变。。让我觉得我做错了什么。
leastsq
没有适当地修改p0。相反,它返回最佳参数。(以及其他一些内容)请参阅此了解详细信息。您可能希望x出现在它返回的内容列表中。
return err.flatten()