日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

matlab中的delaunay,python – Matlab delaunayn和Scipy Delaunay之间的区别

發布時間:2024/1/1 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab中的delaunay,python – Matlab delaunayn和Scipy Delaunay之间的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試使用scipy.spatial.Delaunay函數復制由Python中的Matlab delaunayn函數執行的N維Delaunay三角剖分.然而,雖然Matlab函數給了我想要和期望的結果,但是scipy給了我不同的東西.考慮到兩者都是QHull庫的包裝器,我發現這很奇怪.我假設Matlab在其調用中隱式設置了不同的參數.我試圖在他們兩個之間復制的情況可以在Matlab’s documentation找到.

設置是在中心有一個點,如下所示.我提供的藍線有助于形象化,但它們沒有任何目的或意義.

我期望的三角測量結果是12個單純形式(在Matlab示例中列出),如下所示.

然而,這個python等效產生“額外”的單純形.

x = np.array([[-1,-1,-1],[-1,1],1,[1,[0,0]])

simp = scipy.spatial.Delaunay(x).simplices

返回的變量simp應該是一個M×N數組,其中M是找到的單純形數(對于我的情況應該是12),N是單形中的點數.在這種情況下,每個單形都應該是四面體,意味著N是4.

我發現的是,M實際上是18,額外的6個單純形不是四面體,而是立方體的6個面.

這里發生了什么?如何將返回的單純形式限制為僅僅是四面體?我用這個簡單的案例來證明這個問題,所以我想要一個不適合這個問題的解決方案.

編輯

感謝Amro的回答,我能夠解決這個問題,我可以在Matlab和Scipy之間找到一個簡單的匹配.有兩個因素在起作用.首先,正如所指出的,Matlab和Scipy使用不同的QHull選項.其次,QHull返回零容量的單純形. Matlab刪除了這些,Scipy沒有.這在上面的例子中很明顯,因為所有6個額外的單純形都是立方體的零體積共面面.可以使用以下代碼在N維中刪除它們.

N = 3 # The dimensions of our points

options = 'Qt Qbb Qc' if N <= 3 else 'Qt Qbb Qc Qx' # Set the QHull options

tri = scipy.spatial.Delaunay(points,qhull_options = options).simplices

keep = np.ones(len(tri),dtype = bool)

for i,t in enumerate(tri):

if abs(np.linalg.det(np.hstack((points[t],np.ones([1,N+1]).T)))) < 1E-15:

keep[i] = False # Point is coplanar,we don't want to keep it

tri = tri[keep]

我想應該解決其他條件,但我保證我的點已經沒有重復,并且方向條件似乎對我能辨別的輸出沒有影響.

總結

以上是生活随笔為你收集整理的matlab中的delaunay,python – Matlab delaunayn和Scipy Delaunay之间的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。