python numpy 中的组合学
Combinatorics in python numpy
我想编写一个函数来输出 2 个矩阵的所有可能组合:
def combine(*args):
return np.array(np.meshgrid(args)).T.reshape(-1, len(args)+1)
然而当通过时:
print(combine(np.array([1,2,3]), np.array([4,5,6])))
它输出:
[[1 2 3]
[4 5 6]]
我怎样才能让它发挥作用?我想保持自动,而不是简单地传递 (args[0], args[1])
直接使用 python itertools:
In [134]: import itertools
In [135]: a,b = [1,2,3], [4,5,6]
In [137]: list(itertools.product(a,b))
Out[137]: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
或作为数组:
In [145]: np.array(list(itertools.product(a,b)))
Out[145]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])
我想编写一个函数来输出 2 个矩阵的所有可能组合:
def combine(*args):
return np.array(np.meshgrid(args)).T.reshape(-1, len(args)+1)
然而当通过时:
print(combine(np.array([1,2,3]), np.array([4,5,6])))
它输出:
[[1 2 3]
[4 5 6]]
我怎样才能让它发挥作用?我想保持自动,而不是简单地传递 (args[0], args[1])
直接使用 python itertools:
In [134]: import itertools
In [135]: a,b = [1,2,3], [4,5,6]
In [137]: list(itertools.product(a,b))
Out[137]: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
或作为数组:
In [145]: np.array(list(itertools.product(a,b)))
Out[145]:
array([[1, 4],
[1, 5],
[1, 6],
[2, 4],
[2, 5],
[2, 6],
[3, 4],
[3, 5],
[3, 6]])