我还有一个关于 NumPy 的问题)
我想按条件从网格中选择一些节点。目的是获取最接近圆形的节点,并将它们移动到圆形边界(通过 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]