Программирование на Python и Scipy

#python #scipy

#python #scipy

Вопрос:

Я получаю это сообщение об ошибке:

 Traceback (most recent call last):
  File "C:/Python27/test", line 14, in <module>
    tck = interpolate.bisplrep(X,Y,Z)
  File "C:Python27libsite-packagesscipyinterpolatefitpack.py", line 850, in bisplrep
    raise TypeError('m >= (kx 1)(ky 1) must hold')
TypeError: m >= (kx 1)(ky 1) must hold
  

Ошибка гласит, что 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) 
  

Комментарии:

1. Хм, вы используете interpolate.bisplrep(X,Y,Z) (как говорится в вашей обратной трассировке) или interpolate.bisplrep(x,y,Z) (как говорится в вашем примере кода)?

Ответ №1:

Вы читали документацию?

Если вы не укажете 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)
  

И, конечно, len(X) = 6 < 16 = (3 1)(3 1) .

Даже если вы задаете kx=1 и ky=1 явно во время вызова, у вас возникает другая проблема. Ваши (x,y) значения образуют линию, и вы не можете определить поверхность из линии. Поэтому это дает вам ValueError: Invalid inputs. . Во-первых, вы должны исправить свои данные. Если это ваши данные, поскольку у вас нет изменений в Y , пропустите их и выполните сплайн в 2D с помощью X и Z .