我正在使用matplotlib爲我的PyQuante量子化學軟件包編寫線和等高線繪圖功能。我有一些很棒的功能,用來評估沿(npts,3)點陣列的基本集合,例如使用matplotlib在pyquante2中繪製等高線軌道
from somewhere import basisset, line
bfs = basisset(h2) # Generate a basis set
points = line((0,0,-5),(0,0,5)) # Create a line in 3d space
bfmesh = bfs.mesh(points)
for i in range(bfmesh.shape[1]):
plot(bfmesh[:,i])
這是快,因爲它評估了所有的基礎功能,同時,我也得到了一些很大的幫助從計算器here和here讓他們額外不錯。
我現在想更新這個來做輪廓繪圖。我過去做得很慢的方法是使用linspace()創建兩個一維向量,使用meshgrid()將這些向量網格化爲二維網格,然後遍歷所有xyz點並評估每個xyz點:
f = np.empty((50,50),dtype=float)
xvals = np.linspace(0,10)
yvals = np.linspace(0,20)
z = 0
for x in xvals:
for y in yvals:
f = bf(x,y,z)
X,Y = np.meshgrid(xvals,yvals)
contourplot(X,Y,f)
(這不是真正的代碼 - 也做了一些愚蠢的)
我想什麼做的是產生或多或少以同樣的方式我的等值線圖中這麼做網「將它解開爲(npts,3)點列表,使用我的新快速例程評估基函數,然後將它重新分解爲用於繪製輪廓圖的X,Y矩陣。
問題是我沒有任何東西可以簡單地調用.ravel():我有xvals和yvals的1d網格,2D版本X,Y和單個z值。
任何人都可以想到一個很好的,pythonic的方式來做到這一點?
啊,這大概是辦法走。我希望我可以重用一些你幫助我做得如此之快的東西,所以我沒有幾種不同的方法來評估網格上的基本函數。謝謝! – Rick
我最終這樣做了。最後,我只寫了兩個例程:一個是評估x,y,z點基函數的例程,它也可以傳遞在meshgrid-ed二維數組中,另一個例程用於評估函數on一個nx3網格。再次感謝您的幫助。 – Rick