2017-02-07 1 views
1

pyplot에 그래프를 그려야하는 numpy 오브젝트가 Python (np)에 있습니다. x, yz이있는 그래프는 그래프가 그려지는 값을 포함하는 목록입니다. 내가 z의 값이 -30에 가장 가까운 xy의 값을 얻으려면, 그래서 여기3D numpy 오브젝트에서 주어진 z 값에 해당하는 x 및 y 값 찾기

data = np.c_[x,y,z] 

# regular grid covering the domain of the data 
mn = np.min(data, axis=0) - 0.009 
mx = np.max(data, axis=0) + 0.009 

X,Y = np.meshgrid(np.linspace(mn[0], mx[0]), np.linspace(mn[1], mx[1])) 
XX = X.flatten() 
YY = Y.flatten() 
A = np.c_[np.ones(data.shape[0]), data[:, :2], np.prod(data[:, :2], axis=1), data[:, :2] ** 2] 
C, _, _, _ = scipy.linalg.lstsq(A, data[:, 2]) 

# evaluate it on a grid 
Z = np.dot(np.c_[np.ones(XX.shape), XX, YY, XX * YY, XX ** 2, YY ** 2], C).reshape(X.shape) 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.2) 
ax.scatter(data[:, 0], data[:, 1], data[:, 2], c='r', s=50) 
plt.xlabel('X') 
plt.ylabel('Y') 
ax.set_zlabel('Z') 
ax.axis('equal') 
ax.axis('tight') 
plt.show() 

: <code>pyplot</code> chart I am getting 다음은 (here에서) 내 코드입니다. 이 값을 xy으로 가져 오려면 어떻게해야합니까?

+0

귀하의 질문이 정확하다고 판단되면 도움이 될 것입니다. http://stackoverflow.com/questions/2566412/find-nearest-value-in-numpy-array –

답변

1

할 수 있습니다 약간의 오차, eps의 조건 -30-eps < z < -30+eps을 만족하는 인덱스를 얻고, xy, 예를 들어,의 값을 얻기 위해이를 사용하는 usenp.where

eps = 10. 
ind = np.where((-30+eps > Z.ravel()) & (Z.ravel() > -30-eps)) 

print("x=",X.ravel()[ind],"y=",Y.ravel()[ind]) 

내가 플롯 링크에서 예제 값과 다릅니다으로 귀하의 경우이 작업을 수행하는 방법을 정확하게 좀 확실 해요 (문의 내용 MCVE 코드를 확인하십시오). 그 아이디어는 괜찮을거야.

관련 문제