簡體   English   中英

如何使用numpy的Meshgrid函數以隨機間隔而不是等距間隔的方式?

[英]How does one use numpy's Meshgrid function with a random interval rather than a equally spaced one?

從概念上講,這是我想要做的。 我想在2D平面中選擇隨機點,然后繪制表面圖。 類似地,一種替代方法(次優想法)可以是對網格網格進行分級,選擇N個隨機點及其對應的高度,然后將它們繪制在曲面圖中。

目前,我能夠成功繪制表面圖的唯一成功方法是使用以下等距點:

start_val, end_val = -1,1
N = 100
x_range = np.linspace(start_val, end_val, N)
y_range = np.linspace(start_val, end_val, N)
(X,Y) = np.meshgrid(x_range, y_range)
Z = np.sin(2*np.pi*X) + 4*np.power(Y - 0.5, 2) #function height for the sake of an example

然后用標准繪圖:

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
plt.title('Original function')

plt.show()

正如我所期望的那樣,這會產生一個漂亮的函數圖。

但是,我想選擇一個已知間隔內的隨機點。 為此,我嘗試了替代方法:

start_val, end_val = -1,1
N = 100
x_range = np.random.uniform(low=start_val, high=end_val, size=N)
y_range = np.random.uniform(low=start_val, high=end_val, size=N)
(X,Y) = np.meshgrid(x_range, y_range)
Z = np.sin(2*np.pi*X) + 4*np.power(Y - 0.5, 2) #function height for the sake of an example

不幸的是,這導致了胡說八道:

在此處輸入圖片說明

而不是點間距均勻的原始版本:

在此處輸入圖片說明

有人知道如何執行我要執行的任務(或類似任務),但是能夠以合理的方式繪制隨機點或包括一些隨機性嗎?

用於網格的x和y范圍不應為隨機順序。 這是因為繪制表面,僅在XYZ空間中擁有一堆點是不夠的:我們還需要知道哪些將與哪些連接。 這由數組中值的相鄰性確定。

示例:如果x_range是[1、2、3],y_range是[5、9],則我們知道點(1,5),(2,5),(1,9)和(2,9 )形成要包含在曲面中的矩形的頂點(當然具有相應的Z值)。 如果x_range改為[1、3、2],我們將改為基於(1,5),(3,5),(1,9)和(3,9)的矩形。

要獲得z = f(x,y)的圖,我們需要對x和y數組進行排序,以便得到的矩形如下所示:

情節

(對於參數圖,x,y,z是參數u,v的函數,我們不一定要對x和y值進行排序;但是u和v可能是排序的,它們的順序將確定x,y的順序)

暫無
暫無

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

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