通用使用numpy.meshgrid

时间:2019-04-11 21:12:25

标签: python numpy

以下是使用meshgrid函数生成扩展网格的最小示例:

from numpy import array, meshgrid

foo = array(([1, 2, 3], [4, 5]))
array(meshgrid(foo[0], foo[1])).T.reshape(-1, 2)

##  array([[1, 4],
##         [1, 5],
##         [2, 4],
##         [2, 5],
##         [3, 4],
##         [3, 5]])

我想实现相同的功能,但是我不想对foo的形状进行硬编码。

这是第二个最小示例,其中foo的形状不同:

from numpy import array, meshgrid

foo = array(([1, 2, 3], [4, 5], [6, 7]))
array(meshgrid(foo[0], foo[1], foo[2])).T.reshape(-1, 3)

##  array([[1, 4, 6],
##         [1, 5, 6],
##         [2, 4, 6],
##         [2, 5, 6],
##         [3, 4, 6],
##         [3, 5, 6],
##         [1, 4, 7],
##         [1, 5, 7],
##         [2, 4, 7],
##         [2, 5, 7],
##         [3, 4, 7],
##         [3, 5, 7]])

很容易看出,我所做的唯一更改是:

  • foo[2]添加为meshgrid函数的参数;
  • reshape参数从(-1, 2)更改为(-1, 3)

有人可以帮我概括我的解决方案,以便在两种情况下都可以使用相同的表达式,而不必进行描述的更改吗?

1 个答案:

答案 0 :(得分:2)

您可以在此处更改呼叫以使其适用于任何2D输入:

from numpy import array, meshgrid

def mesh(foo):
  return array(meshgrid(*foo)).T.reshape(-1, foo.shape[0])

print(mesh(array(([1, 2, 3], [4, 5]))))
print(mesh(array(([1, 2, 3], [4, 5], [6, 7]))))