Numpy 使用python制作更好的点网格

Numpy 使用python制作更好的点网格,numpy,grid,boundary,Numpy,Grid,Boundary,我可以简单地说,在一个矩形区域中用点组成简单的网格: import numpy as np x = np.linspace(0,2,M+1) y = np.linspace(0,1,N+1) X,Y = np.meshgrid(x,y) 并将该值按我想要的特定顺序放置(我想要代码读取x上的点,然后移到下面的y) 现在,我需要我的代码来区分网格的周界点和内部点,并且能够轻松地调用它们,因为我的函数知道这些点的值。如何做到这一点?矩形轴对齐网格的周长由任一坐标最极端的所有点组成 简单地说,找到x

我可以简单地说,在一个矩形区域中用点组成简单的网格:

import numpy as np

x = np.linspace(0,2,M+1)
y = np.linspace(0,1,N+1)
X,Y = np.meshgrid(x,y)
并将该值按我想要的特定顺序放置(我想要代码读取x上的点,然后移到下面的y)


现在,我需要我的代码来区分网格的周界点和内部点,并且能够轻松地调用它们,因为我的函数知道这些点的值。如何做到这一点?

矩形轴对齐网格的周长由任一坐标最极端的所有点组成

简单地说,找到x和y为最大值和最小值的所有位置:

is_perimeter = (positions[0] == np.min(y)) | (positions[0] == np.max(y)) | (positions[1] == np.min(x)) | (positions[1] == np.max(x))
对于任何点
i
为周长,如果对应点
位置[:,i]
在周长上,则[i]
,否则为

让我们验证一下结果:

import numpy as np
import matplotlib.pyplot as plt

M, N = 5, 8

x = np.linspace(0,2,M+1)
y = np.linspace(0,1,N+1)
X,Y = np.meshgrid(x,y)

positions = np.vstack([Y.ravel(), X.ravel()])

is_perimeter = (positions[0] == np.min(y)) | (positions[0] == np.max(y)) | \
               (positions[1] == np.min(x)) | (positions[1] == np.max(x))

plt.scatter(*positions[::-1], c=is_perimeter)
plt.show()

矩形轴对齐栅格的周长由任一坐标最极端的所有点组成

简单地说,找到x和y为最大值和最小值的所有位置:

is_perimeter = (positions[0] == np.min(y)) | (positions[0] == np.max(y)) | (positions[1] == np.min(x)) | (positions[1] == np.max(x))
对于任何点
i
为周长,如果对应点
位置[:,i]
在周长上,则[i]
,否则为

让我们验证一下结果:

import numpy as np
import matplotlib.pyplot as plt

M, N = 5, 8

x = np.linspace(0,2,M+1)
y = np.linspace(0,1,N+1)
X,Y = np.meshgrid(x,y)

positions = np.vstack([Y.ravel(), X.ravel()])

is_perimeter = (positions[0] == np.min(y)) | (positions[0] == np.max(y)) | \
               (positions[1] == np.min(x)) | (positions[1] == np.max(x))

plt.scatter(*positions[::-1], c=is_perimeter)
plt.show()

X[0,:],Y[:,-1]。等等。在2d X上建立简单的索引,Y会找到周长,换句话说,我的评论,X和Y很容易区分这些点,使用vstack/ravelX[0,:],Y[:,-1]很难。等等。在2d X上建立简单的索引,Y找到周长,换句话说,我的评论,X和Y使区分这些点变得很容易,你的vstack/ravel很难