我正在寻找类似网格网格函数的清晰比较。不幸的是我没找到它!
Numpy http://docs.scipy.org/doc/numpy/reference/提供
mgrid
ogrid
meshgrid
Scitools http://hplgit.github.io/scitools/doc/api/html/index.html提供
ndgrid
boxgrid
理想情况下,总结所有这些的表格将是完美的!
答案 0 :(得分:71)
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
包含放入函数的x
和y
的所有组合。当你考虑它时,meshgrid
对于numpy数组来说有点多余,因为它们是广播的。这意味着你可以做到
XX, YY = numpy.atleast_2d(x, y)
YY = YY.T # transpose to allow broadcasting
ZZ = XX + YY
并获得相同的结果。
mgrid
和ogrid
是使用索引表示法的帮助程序类,因此您可以直接在前面的示例中创建XX
和YY
,而不必使用{ {1}}。生成输出的顺序相反。
linspace
我不熟悉scitools的东西,但是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
似乎等同于ndgrid
,而meshgrid
实际上是帮助这种生成的整个类。
答案 1 :(得分:0)
np.mgrid
和np.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
。