2017-10-30 13 views
0

とポイントのより良いグリッドを作成します。私は単純に言って、矩形領域内のポイントのシンプルなグリッドを作ることができるのpython

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への移行)

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

今私の機能ので、私は、境界点とグリッドの内部点とを区別し、簡単に呼び出すことができるように自分のコードを必要としますそれらの点の値を知っている。これはどうすればできますか?

+0

X [0 ,:]、Y [: - 1]。 2d X、Y上での簡単なインデックス作成は、周囲を見つける、 – hpaulj

+0

私のコメントを別の方法で入れたい場合、XとYはこれらの点を簡単に区別できるようにします。あなたのvstack/ravel – hpaulj

答えて

0

長方形の軸に位置合わせされたグリッドの周囲は、座標が最も極端なすべての点で構成されます。簡単に言えば

、xおよびyは最大値と最小値のいずれかである全ての位置を見つける:対応点positions[:, i]が境界上にある場合

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

任意の点iis_perimeter[i]についてはTrueであり、そうでなければFalseあります。

での結果を確認してみましょう:

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() 

enter image description here

関連する問題