Проблемы с бисплрепом и бисплевом от scipy.interpolate - PullRequest
0 голосов
/ 30 сентября 2019

Я получаю довольно странное поведение с bisplrep и bisplev из модуля scipy.interpolate. Я пытаюсь воспроизвести пример с домашней страницы scipy (https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html). У меня есть функция f(x,y), которая вычисляет мне некоторые z-значения, которые я затем интерполирую, используя bisplrep. Если я пересчитываю данные, используя bisplev инанесите на график данные, полученные значения будут повернуты примерно на 90 °. Даже если я поменяю значения x и y, график все равно будет повернут. Может кто-нибудь сказать мне, если я делаю что-то здесь совершенно неправильно? Следующий код должен быть достаточным, чтобы воспроизвести ошибкуЯ использую самую последнюю версию scipy, и ошибка возникает в Jupyter, Spyder и в IDLE.

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

def f(x, y):
    return x**2 + y**2

x, y = np.linspace(0, 5, 15), np.linspace(-2*np.pi, 2*np.pi, 15)
xx, yy = np.meshgrid(x, y)
zz = f(xx, yy)

tck = interpolate.bisplrep(xx, yy, zz)

plt.pcolor(xx, yy, zz)

x_new, y_new = np.linspace(0, 5, 100), np.linspace(-2*np.pi, 2*np.pi, 100)

z_new = interpolate.bisplev(x_new, y_new, tck)

plt.figure()    
plt.pcolor(x_new, y_new, z_new)

plt.figure()    
plt.pcolor(y_new, x_new, z_new)

plt.show()

1 Ответ

0 голосов
/ 30 сентября 2019

Я использовал другое определение для сетки. Теперь должно работать:

import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

def f(x, y):
    return x**2 + y**2

#x, y = np.linspace(0, 5, 15), np.linspace(-2*np.pi, 2*np.pi, 15)
xx, yy = np.mgrid[0:5:15j, -2*np.pi:2*np.pi:15j]
zz = f(xx, yy)

tck = interpolate.bisplrep(xx, yy, zz)

plt.pcolor(xx, yy, zz)

#x_new, y_new = np.linspace(0, 5, 100), np.linspace(-2*np.pi, 2*np.pi, 100)
xx_new, yy_new = np.mgrid[0:5:100j, -2*np.pi:2*np.pi:100j]

zz_new = interpolate.bisplev(xx_new[:,0], yy_new[0,:], tck)

plt.figure()    
plt.pcolor(xx_new, yy_new, zz_new)

plt.figure()    
plt.pcolor(yy_new, xx_new, zz_new)

plt.show()
...