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