2
我还有一个关于NumPy的问题)由索引条件numpy阵列修改
我想从条件选择一些节点从网格节点。目的是取最接近圆的节点,并将它们移动到圆边界(由Ox或Oy决定 - 它取决于距离会更小)。
我的实现:有趣节点
for i, val in np.ndenumerate(X[condition]):
pass
for j, val in np.ndenumerate(Y[condition]):
pass
那我应该比较X和Y(即我需要的
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)坐标值而不是索引),并根据比较结果修改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
所以,我怎么能实现呢?
UPD:
最完整的阐述和@ecatmur的建议已经解决了我的问题。该解决方案可以像(同样为Y):
condition_X = condition & (distance_X < distance_Y)
X[condition_X] = (X - distance_X)[condition_X]
对不起误导 - 我应该从节点没有坐标,但距离比较圆边界由Ox/Oy(我编辑了这个问题)。 – erthalion
仍然以同样的方式工作;只需使用'distance_X
ecatmur
谢谢,你说得对。但有一个时刻,我仍然不明白 - 我怎样才能使用这个操作 'X [condition&condition2] = val' 设定值,这将取决于指数? 'X [condition&condition2] = func(index)' – erthalion