Python中的行顺序和笛卡尔平面的抽象

时间:2012-11-03 21:56:03

标签: python numpy row iteration

如何将2D笛卡尔平面(x,y)的坐标系转换为索引为a [i,j]的矩阵?

假设您必须使用有限差分法模拟2D平面中的热传导。您将系统的边界指定为左下方的一个点pos_inf,右上角的一个点pos_sup

结果形成一个曲面图,其中索引a [i,j]存储该点温度的值,并且必须存储在索引为ij的矩阵中,a[i,j]。两个方向的间距h相同,如何进行离散化,以及Python跟随的行排序如何干扰?

1 个答案:

答案 0 :(得分:1)

现在抨击我的头后,我终于掌握了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中最右边的索引,[i,j]中的j,遍历相同行中的元素,points_x次。 i,最左边的索引,将遍历列数points_y。 <循环由

给出
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.]])

此图表显示了方向:enter image description here