3

我还有一个关于 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]
4

1 回答 1

1

将您的条件与&运算符结合起来:

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