NumPy についてもう 1 つ質問があります)
条件によってグリッドからいくつかのノードを選択したい。目的は、円に最も近いノードを取得し、それらを円の境界に移動することです (Ox または Oy によって - 距離が短くなることに依存します)。
私の実装:
x = np.linspace(0, lx, nx)
y = np.linspace(0, ly, ny)
X, Y = np.meshgrid(x, y)
# one part of condition
distance = R - np.sqrt((X-x0)**2 + (Y-y0)**2)
condition = (distance > 0) & (distance < step)
これで、興味深いノードの (x, y) 座標を取得できます
for i, val in np.ndenumerate(X[condition]):
pass
for j, val in np.ndenumerate(Y[condition]):
pass
次に、結果のノードの x と y (つまり、インデックスではなく値が必要) を比較し、比較の結果に応じて X または Y を変更する必要があります。次のようになります。
# distance_X/distance_Y are the distances to circle boundary by Ox/Oy
for x, y in np.nditer([distance_X[condition], distance_Y[condition]]):
if x < y:
# modify X array
if y < x:
# modify Y array
ご覧のとおり、私はできませんX[condition] = some_value
では、どうすればこれを実装できますか?
更新:
@ecatmur の完全な定式化とアドバイスにより、私の問題は解決しました。解決策は次のようになります (Y についても同様):
condition_X = condition & (distance_X < distance_Y)
X[condition_X] = (X - distance_X)[condition_X]