2013-07-29 3 views
2

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

그래서 내가 어떻게이 구현할 수 없습니다?

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 [조건 및 조건 2] = func (색인) ' – erthalion