簡體   English   中英

在3D numpy對象中查找與給定z值對應的x和y值

[英]Finding x and y values corresponding to given z value in 3D numpy object

我在Python( np )中有一個numpy對象,我正在用pyplot繪制圖形。 它是一個三維圖形,其中xyz是包含要繪制圖形的值的列表。 我正在獲取<code> pyplot </ code>圖表 下面是我的代碼(從這里 ):

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()

所以在這里,我想得到xy的值,其中z的值最接近-30 如何獲得xy值。

您可以嘗試以下(另請參閱在numpy數組中查找最近的值

value = 30.
zid = (np.abs(Z-value)).argmin()
xval = np.reshape(X, -1)[zid]
yval = np.reshape(Y, -1)[zid]
print xval, yval, np.reshape(Z, -1)[zid]

我在問題中提到的示例( https://gist.github.com/amroamroamro/1db8d69b4b65e8bc66a6 )上檢查了它,它似乎有效。

您可以使用 np.where來獲取滿足某些容差, eps的條件-30-eps < z < -30+eps的索引,並使用它們來獲取xy的值,例如

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

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

我有點不確定如何在你的情況下這樣做,因為你的情節與鏈接的示例值不同(請將代碼置於MCVE中 )。 這個想法應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM