Python 推广numpy.meshgrid的使用

Python 推广numpy.meshgrid的使用,python,numpy,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], ##

下面是一个使用
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
    函数中
  • 重塑
    参数从
    (-1,2)
    更改为
    (-1,3)

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

以下是如何将调用转换为适用于任何2D输入的调用:

来自numpy导入数组,网格网格
def网格(foo):
返回数组(meshgrid(*foo)).T.reformate(-1,foo.shape[0])
打印(网格(数组([1,2,3],[4,5]))
打印(网格(数组([1,2,3],[4,5],[6,7]))

以下是如何将您的呼叫转换为任何2D输入:

来自numpy导入数组,网格网格
def网格(foo):
返回数组(meshgrid(*foo)).T.reformate(-1,foo.shape[0])
打印(网格(数组([1,2,3],[4,5]))
打印(网格(数组([1,2,3],[4,5],[6,7]))

谢谢!我仍然在努力使用
*args
,很抱歉这个非常基本的问题!这没问题,一开始有点难,因为根据上下文,
*args
实际上有两种不同(相反)的含义。这种矛盾心理使得一元
*
运算符在开始时有点混乱。在函数签名中,可以解释为“合并名为
args
的元组中的所有参数”,而在函数调用中(如本例中),可以解释为“将
foo
扩展到多个参数”。这些通常分别称为包装和开箱。换句话说,
def(*X)
with
f(*(1,2,3))
的工作方式与
def(X)
with
f((1,2,3))
的工作方式完全相同。除了在第一种情况下,我们打包然后解包元组
(1,2,3)
,而在第二种情况下,我们直接传递
(1,2,3)
。最后,
X
在两个
f
函数中具有相同的值。谢谢!我仍然在努力使用
*args
,很抱歉这个非常基本的问题!这没问题,一开始有点难,因为根据上下文,
*args
实际上有两种不同(相反)的含义。这种矛盾心理使得一元
*
运算符在开始时有点混乱。在函数签名中,可以解释为“合并名为
args
的元组中的所有参数”,而在函数调用中(如本例中),可以解释为“将
foo
扩展到多个参数”。这些通常分别称为包装和开箱。换句话说,
def(*X)
with
f(*(1,2,3))
的工作方式与
def(X)
with
f((1,2,3))
的工作方式完全相同。除了在第一种情况下,我们打包然后解包元组
(1,2,3)
,而在第二种情况下,我们直接传递
(1,2,3)
。最后,
X
在两个
f
函数中具有相同的值。