3

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]
4

1 に答える 1

1

&条件を演算子と組み合わせます。

X[condition & (distance_X < distance_Y)] = ...
Y[condition & (distance_Y < distance_X)] = ...
于 2013-07-29T15:54:10.147 に答える