大数组行的笛卡尔积

时间:2019-05-31 07:50:15

标签: python numpy cartesian-product

我的数组大小为(100,50)。我需要生成一个输出数组,该数组代表输入数组行的笛卡尔积。

为简化起见,让我们有一个输入数组:

array([[2, 6, 5],
       [7, 3, 6]])

作为输出,我希望拥有:

array([[2, 7],
       [2, 3],
       [2, 6],
       [6, 7],
       [6, 3],
       [6, 6],
       [5, 7],
       [5, 3],
       [5, 6]])

注意:由于输入向量的大小,itertools.product在这里不起作用。还有所有其他类似的答案,假设行数小于32,这里不是这种情况

2 个答案:

答案 0 :(得分:1)

这个问题已经问过很多次了,例如here
大小为(100,50)的数组太大,因此numpy无法处理。但是,可以解决较小的阵列大小。 无论如何,我更喜欢将itertools用于此类内容:

import itertools

a = np.array([[2, 6, 5], [7, 3, 6]])

np.array(list(itertools.product(*a)))
array([[2, 7],
       [2, 3],
       [2, 6],
       [6, 7],
       [6, 3],
       [6, 6],
       [5, 7],
       [5, 3],
       [5, 6]])

答案 1 :(得分:0)

a = np.array([[2, 6, 5],[7, 3, 6]])

out = np.array(np.meshgrid(a[0], a[1])).T.reshape(-1,2)
print(out)

"""
prints
[[2 7]
 [2 3]
 [2 6]
 [6 7]
 [6 3]
 [6 6]
 [5 7]
 [5 3]
 [5 6]]
"""