Python 非常大数组行的笛卡尔积

Python 非常大数组行的笛卡尔积,python,numpy,cartesian-product,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]])

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

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

对于一个(50100)形状的数组,这个问题将永远存在,这不是同一个问题,因为所有的例子都没有假设数组的数量大于32@ArtemZhukov很抱歉,没有注意数组的维度。我怀疑没有计算机能处理这些数字。你试过计算笛卡尔积矩阵的维数吗?@ArtemZhukov我接受了你的编辑,但我必须指出,“不能由numpy处理”可能会产生误导,因为它没有得到真正的点。100*50^100个数字比宇宙中所有的电子都要多得多,计算这些组合比宇宙的年龄要多得多,不管你要用什么numpy、itertools或超级量子计算机,如果输入的是形状(50,100)?好,你已经明白了——numpy无法处理这样的维度。你想要创建一个大小为(50^100100)的数组,它远远超过了巨大的数组。“如果你告诉我们你想达到什么目标,我很肯定会有不同的解决办法。”兰德拉说。你的回答改变了我对我们可能性的理解。所以基本上我是在尝试做一种网格搜索,通过对所有可能输入的数组应用分类模型。可能应该像hyperopt.github.io/这是一个选项。为了得到一个详尽的答案,我在这里提出了一个关于SO或机器学习主题的新问题