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

Posted

技术标签:

【中文标题】Python 中的网格网格函数 (meshgrid mgrid ogrid ndgrid)【英文标题】:Mesh grid functions in Python (meshgrid mgrid ogrid ndgrid) 【发布时间】:2012-09-06 07:00:37 【问题描述】:

我正在寻找类似网格的功能的清晰比较。可惜没找到!

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】:

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]])

所以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 实际上是一个帮助这种生成的整个类。

【讨论】:

感谢您的回复。但是我不明白如果我有 3 个(或更多)参数应该使用什么让我们称它们为 x1、x2、x3! Meshgrid 是明确的 2D。其他的都支持更多的维度。这实际上可以解释 ndgrid 的存在。 meshgrid和mgrid的结果不同。试试 mgrid[1:4, 1:4] 和 meshgrid([1,2,3], [1,2,3])。 在第二部分你做XX = XX.T 它应该真的是YY = YY.T。如果 x 和 y 不同,这将变得很明显。 为什么要避免使用 linspace?【参考方案2】:

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)

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

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

产生True

需要对所有三个数组d11d22d33 进行此维度交换。

【讨论】:

以上是关于Python 中的网格网格函数 (meshgrid mgrid ogrid ndgrid)的主要内容,如果未能解决你的问题,请参考以下文章

matlab函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法

Python基础:Numpy函数介绍:Meshgrid,mgrid,append等

Python基础:Numpy函数介绍:Meshgrid,mgrid,append等

Python基础:Numpy函数介绍:Meshgrid,mgrid,append等

matlab mashgrid 函数

numpy.meshgrid()理解