2013-07-29 73 views
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] 

回答

1

&运营商结合您的条件:

X[condition & (distance_X < distance_Y)] = ... 
Y[condition & (distance_Y < distance_X)] = ... 
+0

对不起误导 - 我应该从节点没有坐标,但距离比较圆边界由Ox/Oy(我编辑了这个问题)。 – erthalion

+1

仍然以同样的方式工作;只需使用'distance_X ecatmur

+0

谢谢,你说得对。但有一个时刻,我仍然不明白 - 我怎样才能使用这个操作 'X [condition&condition2] = val' 设定值,这将取决于指数? 'X [condition&condition2] = func(index)' – erthalion