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")
根据上面的推论,ii和jj的第0维和第1维分别对应于i和j所代表的坐标系,xx和yy的第0维和第1维分别对应于y和x所代表的坐标系,即以下对应关系成立:
坐标系 | 结果的维度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的参数k(k > 1)。
(完)