我收到此错误消息:
Traceback (most recent call last):
File "C:/Python27/test", line 14, in <module>
tck = interpolate.bisplrep(X,Y,Z)
File "C:\Python27\lib\site-packages\scipy\interpolate\fitpack.py", line 850, in bisplrep
raise TypeError('m >= (kx+1)(ky+1) must hold')
TypeError: m >= (kx+1)(ky+1) must hold
Run Code Online (Sandbox Code Playgroud)
错误说明了len(X) = m is <=(kx+1)(ky+1)
.我怎么解决这个问题?这是我的计划:
import scipy
import math
import numpy
from scipy import interpolate
x= [1000,2000,3000,4000,5000,6000]
y= [1000]
Y = numpy.array([[i]*len(x) for i in y])
X = numpy.array([x for i in y])
Z = numpy.array([[21284473.74,2574509.71,453334.97,95761.64,30580.45,25580.60]])
tck = interpolate.bisplrep(x,y,Z)
print interpolate.bisplev(3500,1000,tck)
Run Code Online (Sandbox Code Playgroud)
你看过文件了吗?
如果不指定kx
和ky
,默认值将是3
:
scipy.interpolate.bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
kx=3, ky=3, task=0, s=None, eps=1e-16, tx=None, ty=None,
full_output=0, nxest=None, nyest=None, quiet=1)
Run Code Online (Sandbox Code Playgroud)
当然,len(X) = 6 < 16 = (3+1)(3+1)
.
即使你给kx=1
,并ky=1
明确调用时,你有另外一个问题.您的(x,y)
值形成一条线,您无法从线定义曲面.因此它给你ValueError: Invalid inputs.
.首先,您应该修复数据.如果这是您的数据,因为您没有变化Y
,请跳过它并使用X
和在2D中执行样条Z
.