диаграмма рассеяния pylab представляется транспонированной

Я играю с различными методами интерполяции – и особенно люблю разновидности, показанные в видео на YouTube. Https://www.youtube.com/watch?v=_cJLVhdj0j4

Однако модуль рассеяния отображает точки в неправильном месте. Я перенес их ниже (пример 5), чтобы заставить его работать, но это не работает, если интересующая область не сосредоточена на происхождении (Test_Rbf).

Я неправильно понимаю что-то фундаментальное, или это проблема в модуле рассеяния pylab?

# Example 5 # # https://www.youtube.com/watch?v=_cJLVhdj0j4 import numpy as np from scipy import interpolate import pylab as py def func(x,y): return (x+y)*np.cos(-5.0*x + 4.0*y) x = np.random.uniform(-1.0, 1.0,size=50) y = np.random.uniform(-1.0, 1.0,size=50) fvals = func(x,y) newfunc = interpolate.Rbf(x, y, fvals, function='multiquadric') xnew, ynew = np.mgrid[-1:1:100j, -1:1:100j] fnew = newfunc(xnew, ynew) true = func(xnew, ynew) py.figure() py.clf() py.imshow( fnew, extent=[-1,1,-1,1], cmap=py.cm.jet) # py.scatter( x, y, 30, fvals, cmap=py.cm.jet) py.scatter( y, -x, 30, fvals, cmap=py.cm.jet) py.show() from enthought.mayavi import mlab mlab.clf() mlab.surf(xnew, ynew, fnew*2) 

Если вы используете

 ynew, xnew = np.mgrid[-1:1:100j, -2:2:100j] 

вместо

 xnew, ynew = np.mgrid[-1:1:100j, -2:2:100j] 

то xnew будет меняться при перемещении по столбцам, а ynew будет меняться по мере перемещения по строкам. (Я изменил x-диапазон от [-1,1] до [-2,2], чтобы было ясно, какие цифры контролируют диапазон).

Объедините это с предложением @ hitzg, чтобы добавить origin='lower' в вызов imshow , и вы получите:

 import numpy as np from scipy import interpolate import matplotlib.pyplot as plt np.random.seed(2015) def func(x,y): return (x+y)*np.cos(-5.0*x + 4.0*y) x = np.random.uniform(-2.0, 2.0, size=50) y = np.random.uniform(-1.0, 1.0, size=50) fvals = func(x,y) newfunc = interpolate.Rbf(x, y, fvals, function='multiquadric') ynew, xnew = np.mgrid[-1:1:100j, -2:2:100j] fnew = newfunc(xnew, ynew) plt.figure() plt.imshow(fnew, extent=[-2,2,-1,1], cmap=plt.cm.jet, origin='lower') plt.scatter(x, y, s=30, c=fvals, cmap=plt.cm.jet) plt.show() 

введите описание изображения здесь