从2个numpy向量生成数字对的数组

mar*_*ion 5 python arrays combinations numpy

在Numpy中有一种简单的方法可以从2个1D numpy数组(向量)生成一组数字对,而不需要循环吗?

输入:

a = [1, 2, 3]
b = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

输出:

c = [(1,4), (1,5), (1,6), (2,4), (3,5), (2,6), (3,4), (3,5), (3,6)]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个功能类似于此:

c = []
for i in range(len(a)):
    for j in range(len(b)):
        c.append((a[i], b[j]))
Run Code Online (Sandbox Code Playgroud)

jon*_*rpe 11

你可以使用itertools.product这个:

from itertools import product

c = list(product(a, b))
Run Code Online (Sandbox Code Playgroud)

这给出了:

c == [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)

  • 对于将来的任何人,你可以做一些事情,例如:`ordered_pa​​irs = np.column_stack((a,b))`...为操作问题返回`[[1 4] [2 5] [3 6]]`.@ Subzero-273K - 为了回答你,你可以使用:`ordered_pa​​irs [0,0]`访问有序对中的每个元素,这将导致返回1.如果你想在每个元素中选择第二个数字,你可以使用`[:,1]` (3认同)
  • 我会接受这个答案,因为它是有效的,但是我使用一个简单的列表理解来逃避它:`c = [(i,j)for i in a for j in b]` (2认同)
  • 我很乐意看到一个解决方案,它位于numpy之内,以避免Python循环的开销。广播,花式索引,矢量化等 (2认同)