任意列表集的成对组合
Pairwise combination of arbitrary set of lists
我正在寻找解决以下问题的通用方法:
给定任意数量的一维或多维列表(NumPy 数组等)return 它们的成对组合。
以下尝试给出三个一维列表 a
、b
和 c
的示例,结果为 d
:
a = np.linspace(0, 1, 1).astype(int)
b = np.linspace(1, 2, 2).astype(int)
c = np.linspace(2, 4, 3).astype(int)
e = np.array([
(a_, b_, c_)
for a_ in a
for b_ in b
for c_ in c
])
执行时变量设置如下:
# a
[0]
# b
[1 2]
# c
[2 3 4]
# d
[[0 1 2]
[0 1 3]
[0 1 4]
[0 2 2]
[0 2 3]
[0 2 4]]
什么是通用方法的好方法?理想情况下,我正在寻找一个函数,该函数接受一个可迭代对象,其元素定义一维或多维列表,如下所示:
def pairwise_combinations(iterable):
# Insert magic here
itertools.product
得到你的支持:https://docs.python.org/3/library/itertools.html#itertools.product
在给定的示例中,它可以这样使用:
d = np.array(list(itertools.product(a, b, c)))
我相信 itertools.product
函数会完全满足您的要求。它以 iterables 作为参数,并形成 all-to-all 的元组,例如:
> a = [0]
> b = [1, 2]
> c = [2, 3, 4]
> print(list(product(a,b,c)))
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 2), (0, 2, 3), (0, 2, 4)]
可以找到有关该工具集的详细信息here。
我正在寻找解决以下问题的通用方法: 给定任意数量的一维或多维列表(NumPy 数组等)return 它们的成对组合。
以下尝试给出三个一维列表 a
、b
和 c
的示例,结果为 d
:
a = np.linspace(0, 1, 1).astype(int)
b = np.linspace(1, 2, 2).astype(int)
c = np.linspace(2, 4, 3).astype(int)
e = np.array([
(a_, b_, c_)
for a_ in a
for b_ in b
for c_ in c
])
执行时变量设置如下:
# a
[0]
# b
[1 2]
# c
[2 3 4]
# d
[[0 1 2]
[0 1 3]
[0 1 4]
[0 2 2]
[0 2 3]
[0 2 4]]
什么是通用方法的好方法?理想情况下,我正在寻找一个函数,该函数接受一个可迭代对象,其元素定义一维或多维列表,如下所示:
def pairwise_combinations(iterable):
# Insert magic here
itertools.product
得到你的支持:https://docs.python.org/3/library/itertools.html#itertools.product
在给定的示例中,它可以这样使用:
d = np.array(list(itertools.product(a, b, c)))
我相信 itertools.product
函数会完全满足您的要求。它以 iterables 作为参数,并形成 all-to-all 的元组,例如:
> a = [0]
> b = [1, 2]
> c = [2, 3, 4]
> print(list(product(a,b,c)))
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 2), (0, 2, 3), (0, 2, 4)]
可以找到有关该工具集的详细信息here。