首页 > 解决方案 > 一个非常大的数组的行的笛卡尔积

问题描述

我有一个大小为(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,这里不是这种情况

标签: pythonnumpycartesian-product

解决方案


这个问题已经被问过很多次了,例如这里
大小为 (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]])

推荐阅读