Python中的网格网格函数(meshgrid mgrid ogrid ndgrid)

scl*_*cls 70 python numpy scipy

我正在寻找类似网格网格函数的清晰比较.不幸的是我找不到它!

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

  • mgrid

  • ogrid

  • meshgrid

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

  • ndgrid

  • boxgrid

理想情况下,总结所有这些的表格将是完美的!

cht*_*mon 75

numpy.meshgrid以Matlab的meshgrid命令为蓝本.它用于向量化两个变量的函数,以便您可以编写

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]])
Run Code Online (Sandbox Code Playgroud)

因此ZZ包含函数的所有组合xy放入函数.当你想到它时,meshgrid对于numpy数组来说,就像它们播放时一样多余.这意味着你可以做到

XX, YY = numpy.atleast_2d(x, y)
YY = YY.T # transpose to allow broadcasting
ZZ = XX + YY
Run Code Online (Sandbox Code Playgroud)

并得到相同的结果.

mgrid并且ogrid是使用索引表示法的辅助类,以便您可以直接创建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
Run Code Online (Sandbox Code Playgroud)

我不熟悉scitools的东西,但ndgrid似乎相当于meshgrid,虽然BoxGrid实际上是一个全班来帮助这种代.

  • meshgrid和mgrid的结果是不同的.试试mgrid [1:4,1:4]和meshgrid([1,2,3],[1,2,3]). (3认同)
  • Meshgrid 是明确的 2D。其他的都支持更多的维度。这实际上可以解释 ndgrid 的存在。 (2认同)

dop*_*xxx 10

np.mgridnp.meshgrid()执行相同的操作,但交换了第一个和第二个轴:

# 3D
d1, d2, d3 = np.mgrid[0:10, 0:10, 0:10]
d11, d22, d33 = np.meshgrid(np.arange(10),np.arange(10),np.arange(10))
np.array_equal(d1,d11)
Run Code Online (Sandbox Code Playgroud)

产量False。只需交换前两个维度:

d11 = np.transpose(d11,[1,0,2])
np.array_equal(d1,d11)
Run Code Online (Sandbox Code Playgroud)

产量True