numpy.meshgrid中的笛卡尔坐标和矩阵坐标

under numpy

in tech

Published: 2016-11-20

numpy.meshgrid可以从坐标轴的坐标生成规则格点,它为前二维网格提供了两种索引方式,笛卡尔坐标(indexing=xy)和矩阵坐标(indexing=ij),如何理解这两种索引方式呢?

按照约定俗成的方式,第i行j列的元素用aij来表示(本文中所有坐标从1开始计数,参数和维度都从0开始计数):

a11 a12 ... a1n
a21 a22 ... a2n
...
am1 am2 ... amn

同样按照习惯表示笛卡尔坐标系中的坐标:

(x1, yn) (x2, yn) ... (xm, yn)
...
(x1, y2) (x2, y2) ... (xm, y2)
(x1, y1) (x2, y1) ... (xm, y1)

按照numpy的约定,二维数组中列是第0维,行是第1维,则上面画出的矩阵坐标中,i坐标轴和j坐标轴分别位于第0维和第1维,笛卡尔坐标中x坐标轴和y坐标轴分别位于第1维和第0维。

在使用numpy.meshgrid的时候,是这样写的:

ii, jj = numpy.meshgrid(i, j, indexing="ij")
xx, yy = numpy.meshgrid(x, y, indexing="xy")

根据上面的推论,iijj的第0维和第1维分别对应于ij所代表的坐标系,xxyy的第0维和第1维分别对应于yx所代表的坐标系,即以下对应关系成立:

坐标系 结果的维度0 结果的维度1
矩阵坐标系 第0个参数对应的坐标系 第1个参数对应的坐标系
笛卡尔坐标系 第1个参数对应的坐标系 第0个参数对应的坐标系

在使用的时候,应该根据数据数组的维度来决定使用哪一种索引方式,举个例子,如果数据是data[lon][lat],则写成:

lon2d, lat2d = numpy.meshgrid(lon, lat, indexing="ij")

如果数据是data[lat][lon],则可省略indexing参数(默认为xy):

lon2d, lat2d = numpy.meshgrid(lon, lat)

在多维情况下,无论采用哪种索引方式,第k维对应numpy.meshgrid的参数kk > 1)。

(完)