的數組這是我的代碼scipy.optimize.leastsq誤差不花車
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")
我已經嘗試添加在沒有使用最多的地方np.array。 有人可以幫我嗎?
這裏的另一個問題是我是否通過添加所有errorsnp.sum(err,axis=1)
來將殘差()的輸出作爲單個值輸出。或者保持原樣?
當我return np.sum(err,axis=1)
在功能residuals()
。初步猜測沒有變化。它仍然是一樣的。
I.E錯誤是針對輸入輸出映射中的每個項目。或總體錯誤?
輸出
ValueError: object too deep for desired array
Traceback (most recent call last):
File "/media/anilil/Data/charm/mv_clean/.idea/nose_reduction_mpeg.py", line 49, in <module>
abc=leastsq(residuals, p0,args=(y,x))
File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 378, in leastsq
gtol, maxfev, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.
你能分享你正在使用的數據或至少它的一個子集? – Cleb
添加了你想要的數據 –
稍微晚一點,Simon的速度更快了:你的確只需要用例如'nr.array(err)'來代替。 'np.ravel(err)'或'err.flatten()'並且它貫穿始終。檢查問題[這裏](http://stackoverflow.com/questions/23769508/scipy-optimize-curve-fit-not-a-proper-array-of-floats-error)和[這裏](http:/ /stackoverflow.com/questions/18579476/scipy-optimize-curve-fit-error-result-from-function-not-a-proper-array-of-float) – Cleb