如何将二维笛卡尔平面 (x,y) 的坐标系转换为索引为 a[i,j] 的矩阵?
假设您必须使用有限差分法模拟二维平面中的热传导。系统的边界是左下角的pos_inf
一个点, 和右上角的一个点,pos_sup
。
结果形成一个表面图,其中索引 a[i,j] 存储该点的温度值,并且必须存储在索引为i
、j
、 as的矩阵中a[i,j]
。在两个方向的间距 h 相同的情况下,应该如何进行离散化,以及 Python 遵循的行排序如何干扰它?
经过一段时间的摇头后,我终于掌握了 Python 使用的行顺序的差异和笛卡尔平面中坐标的定义。这很简单,但我把它放在这里是因为它可能会让新手或阅读障碍者感到困惑。
正如已经指出的那样,这与np.meshgrid的行为非常相似。这个问题的原因是为了用简单的语言解释笛卡尔平面转换为矩阵形式的想法。
给定一个平面,其左下角有一个点 pos_inf,坐标为 pos_inf = (x_inf, y_inf),右上角有一个点 pos_sup (x_sup, y_sup),间距 h(我假设对于x 和 y 方向),每个方向的离散点数等于
points_x = int((x_sup - x_inf) / h)
points_y = int((y_sup - y_inf) / h)
假设我想在这个网格的每个点中存储一个函数的值。我生成一个大小的矩阵
a = np.zeros((points_y, points_x))
请注意,Python 中最右边的索引,即 a[i,j] 中的 j,会遍历同一行中的元素, points_x 次。i,最左边的索引,将遍历列数,points_y。for 循环由下式给出
for i in xrange(points_y):
for j in xrange(points_x):
a[i,j] = i
这样 x 方向的点对应于 j 索引,y 方向的点对应于 i 索引。因此,例如,如果 points_x = 5 和 points_y = 6,则用 h = 1 离散化的笛卡尔空间,从 x_inf=0 到 x_sup=5 和 y_inf = 0 到 y_sup = 6,将是
a = np.zeros((5,6))
for i in xrange(5):
for j in xrange(6):
a[i,j] = i
array([[ 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3., 3.],
[ 4., 4., 4., 4., 4., 4.]])
该图显示了方向: