2012-09-13 24 views
50

我正在尋找類似meshgrid函數的明確比較。不幸的是我找不到它!Python中的網格網格函數(meshgrid mgrid ogrid ndgrid)

numpy的http://docs.scipy.org/doc/numpy/reference/提供

  • mgrid

  • ogrid

  • meshgrid

Scitools http://hplgit.github.io/scitools/doc/api/html/index.html提供

  • ndgrid

  • boxgrid

理想情況下表總結了這一切將是完美的!

+1

這不是一個有建設性的問題嗎? – aquirdturtle

+1

@aquirdturtle。我想知道這一點。對問題的回覆數量很好地表明瞭它的實用性。這些文檔並不盡如人意。 –

回答

62

numpy.meshgrid仿照Matlab的meshgrid命令。它是用來vectorise兩個變量的函數,這樣你可以寫

x = numpy.array([1, 2, 3]) 
y = numpy.array([10, 20, 30]) 
XX, YY = numpy.meshgrid(x, y) 
ZZ = XX + YY 

ZZ => array([[11, 12, 13], 
      [21, 22, 23], 
      [31, 32, 33]]) 

所以ZZ包含裝進功能的xy所有組合。當你想到它時,meshgrid對於numpy數組在播放時有點多餘。這意味着你可以做

XX, YY = numpy.atleast_2d(x, y) 
YY = YY.T # transpose to allow broadcasting 
ZZ = XX + YY 

並得到相同的結果。

mgridogrid是其使用索引符號,這樣就可以創建直接在前面的例子XXYY,而無需使用類似linspace輔助類。產生輸出的順序是相反的。

YY, XX = numpy.mgrid[10:40:10, 1:4] 
ZZ = XX + YY # These are equivalent to the output of meshgrid 

YY, XX = numpy.ogrid[10:40:10, 1:4] 
ZZ = XX + YY # These are equivalent to the atleast_2d example 

我不熟悉scitools的東西,但似乎ndgrid相當於meshgrid,而BoxGrid實際上是全班同學來幫助這種產生。

+0

感謝您的回覆。但我不明白我應該使用什麼,如果我有3個參數(或更多),我們稱他們爲x1,x2,x3! – scls

+1

Meshgrid顯式爲2D。其他人都支持更多維度。這實際上可以解釋ndgrid的存在。 – chthonicdaemon

+2

meshgrid和mgrid的結果是不同的。試試mgrid [1:4,1:4]和meshgrid([1,2,3],[1,2,3])。 – FJDU