我对i & (1 << j)
的参数顺序感到困惑。我正在读取一组2D数据,其沿X轴具有343个值,沿Y轴具有373个值。读取数据的例程以“正确”的意义返回它,这样当我绘制matplotlib时,我得到一个具有正确物理方向的地图。它还返回343个元素的数组中的X值和373个元素的数组中的Y值,这是有意义的。
RectBivariateSpline
的scipy文档给出的参数为:
RectBivariateSpline
然而,当我执行
时scipy.interpolate.RectBivariateSpline(x, y, z)
我收到此错误:
spln = scipy.interpolate.RectBivariateSpline(xval, yval, zval)
我可以通过执行
删除错误TypeError: x dimension of z must have same number of elements as x
但是现在x和y的值是错误的方式(至少在物理意义上)。这是否意味着spln = scipy.interpolate.RectBivariateSpline(yval, xval, zval)
的{{1}}参数是指数据集的第一个数据维度而不是物理x
维度?我习惯于使用Fortran式排序的数据,这可能没有帮助。
在回答hpaulj的评论时,各种数组的形状是: xval(343,) yval(373,) zval(373,343)
我认为问题在于我在'xy'和'ij'排序之间感到困惑。 Matpoltlib似乎使用'xy'排序,所以我想在使用scipy进行插值时我需要小心转置ZVAL数组
答案 0 :(得分:0)
向我们展示xval.shape
,yval.shape
和zval.shape
早期RectBivariateSpline
代码确实:
x, y = ravel(x), ravel(y)
....
if not x.size == z.shape[0]:
raise TypeError('x dimension of z must have same number of '
'elements as x')
if not y.size == z.shape[1]:
raise TypeError('y dimension of z must have same number of '
'elements as y')
因此rows
(第一维)z
的数量必须与x
中的元素数相匹配。
当您显示二维数组时,行是第一维,沿着页面向下,第二列是第二维。但是在情节中,我们经常期望第一个轴x
穿过页面。
np.meshgrid
可让您指定:
indexing : {'xy', 'ij'}, optional Cartesian ('xy', default) or matrix ('ij') indexing of output. See Notes for more details.
&#39; xy&#39;之间的区别索引和&#39; ij&#39;索引可能会使您感到困惑。此Spline课程正在使用&#39; ij&#39;样。
切换x
和y
的替代方法是使用z
,z.T
的转置。请记住,插值点遵循相同的排序规则。
简单示例
In [30]: x=np.arange(10)
In [31]: y=np.arange(15)
In [32]: z=x[:,None]*y[None,:]
In [33]: S=interpolate.RectBivariateSpline(x,y,z)
In [34]: S([1,2,3],[4,5,6])
Out[34]:
array([[ 4., 5., 6.],
[ 8., 10., 12.],
[ 12., 15., 18.]])
对比meshgrid
中的xy v ij:
In [37]: np.meshgrid(x,y)[0].shape
Out[37]: (15, 10)
In [38]: np.meshgrid(x,y,indexing='ij')[0].shape
Out[38]: (10, 15)
z
可以从ij
网格构建。
X,Y=np.meshgrid(x,y,indexing='ij')
Z = X*Y