2014-03-03 1 views
0

이전 질문 (here)을 따랐으니 중요한 모든 그리드 값에 점을 찍으시겠습니까? 그 순간 나는 이것을 좋아한다.contourf 플롯에 점을 그려야합니다.

ax.contourf(x, y, z) 
for i in x: 
    for j in y: 
     if significant[i, j]==True: ax.plot(i, j, 'bo') 

이것은 매우 느리기 때문에 명백히 나쁘다. 이 문제에 대한 간단한 (빠른) 해결책이 있습니까? x와 y는 길이가 같지 않고 x는 가변 길이 여야합니다.

for i, j in zip(*np.where(significant)): 
    ax.plot(x[i], y[j], 'bo') 

np.where 두 가지로 튜플을 반환합니다 x와 y는 arange에 같이하지 않는 경우,

for i, j in zip(*np.where(significant)): 
    ax.plot(i, j, 'bo') 

을 또는 :

+0

['ax.scatter'] (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter)가 수행 할 것입니다. –

+0

나는 이미 그것을 시도했다. len (x) = len (y)가 필요합니다. 따라서 적어도 조정하지 않으면 작동하지 않습니다. – Lukas

+0

'x'와'y' 2D 배열입니까? 그런데 : 당신은'significant [i.j] == True'가 될 때마다'ax.plot (x, y, 'bo')'(모든 x와 y 배열)을 꾸몄다. 오타입니까? –

답변

1

당신은 어디에서 중요한 것은 사실이다 루프를 할 수 요소, 0이 아닌 요소의 첫 번째 및 두 번째 인덱스

+0

확실히 더 우아하고 훨씬 더 빠릅니다. 감사합니다. for-loop는 나에게 효과가 없었지만, 조정해야했습니다. zip (np.where (중요) [0], np.where (중요) [1]) – Lukas

+0

어느 numpy 버전이 너 사용하고있어? 나는 그것을 다시 검사했고 작동한다 : significant = np.zeros ((5,4), dtype = np.bool); 중요한 [1, 3] = 참; 중요 [3, 2] = 참; for i, j in np.where (중요) : print i, j – Davidmh

+0

버전 1.6.2를 사용합니다. 같은 인덱스에서 두 인덱스를 동시에 실행하려면 zip()을 사용해야합니다. a = b = range (5); i, j의 zip (a, b) : print i, j. 당신은 제게 두 가지 가치관을 맞춰 주시겠습니까? 그 이유는 정확히 나에게도 효과가 있기 때문입니다. 그러나 그것은 또한 색인으로 넘어가는 것과 같은 우연의 일치이기 때문입니다. – Lukas

관련 문제