一个非常大的数组的行的笛卡尔积
Cartesian product of rows of a very big array
我有一个大小为 (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]])
我有一个大小为 (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]])