关于numpy:Python中的网格网格函数(meshgrid mgrid ogrid ndgrid)

Mesh grid functions in Python (meshgrid mgrid ogrid ndgrid)

我正在寻找与网状网格类似的功能的清晰对比。不幸的是我找不到它!

脾气暴躁的http://docs.scipy.org/doc/numpy/reference/提供

  • mgrid

  • ogrid

  • meshgrid

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

  • ndgrid

  • boxgrid

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


numpy.meshgrid是根据Matlab的meshgrid命令建模的。它用于向量化两个变量的函数,因此您可以编写

1
2
3
4
5
6
7
8
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数组来说有点多余,因为它们进行广播。这意味着您可以

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

并获得相同的结果。

mgridogrid是使用索引符号的帮助程序类,因此您可以直接在前面的示例中创建XXYY,而不必使用类似linspace的东西。生成输出的顺序相反。

1
2
3
4
5
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实际上是帮助此类生成的整个类。


np.mgridnp.meshgrid()做相同的事情,但是交换了第一根和第二根轴:

1
2
3
4
# 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)

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

1
2
d11 = np.transpose(d11,[1,0,2])
np.array_equal(d1,d11)

产量True