以下是使用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)
。有人可以帮我概括我的解决方案,以便在两种情况下都可以使用相同的表达式,而不必进行描述的更改吗?
答案 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]))))