我想我遗漏了一些明显的东西。我想找到 arr1(一维 numpy 数组)的笛卡尔积和 arr2(二维 numpy 数组)的 ROWS。因此,如果 arr1 有 4 个元素并且 arr2 的形状为 (5,2),则输出的形状应为 (20,3)。 (见下文)
import numpy as np
arr1 = np.array([1, 4, 7, 3])
arr2 = np.array([[0, 1],
[2, 3],
[4, 5],
[4, 0],
[9, 9]])
期望的输出是:
arr3 = np.array([[1, 0, 1],
[1, 2, 3],
[1, 4, 5],
[1, 4, 0],
[1, 9, 9],
[4, 0, 1],
[4, 2, 3],
[4, 4, 5],
[4, 4, 0],
[4, 9, 9],
[7, 0, 1],
[7, 2, 3],
[7, 4, 5],
[7, 4, 0],
[7, 9, 9],
[3, 0, 1],
[3, 2, 3],
[3, 4, 5],
[3, 4, 0],
[3, 9, 9]])
我一直在尝试使用 np.array(np.meshgrid(arr1,arr2)) 之类的代码进行转置和 reshape ,但还没有成功。
我希望解决方案可以推广,因为我还需要处理这样的情况:获取二维 (10,2) 数组的行和二维数组 (20) 的行的所有组合, 5) 得到一个输出数组 (200,7)。
最佳答案
这是一个同样适用于您的一般情况的矢量化解决方案:
arr1 = np.array([[1, 4],
[7, 3]])
arr2 = np.array([[0, 1],
[2, 3],
[4, 5],
[4, 0],
[9, 9]])
np.hstack((np.repeat(arr1,len(arr2),0),np.stack((arr2,)*len(arr1)).reshape(-1,arr2.shape[1])))
形状(2,2)
*(5,2)
->(10,4)
的输出:
[[1 4 0 1]
[1 4 2 3]
[1 4 4 5]
[1 4 4 0]
[1 4 9 9]
[7 3 0 1]
[7 3 2 3]
[7 3 4 5]
[7 3 4 0]
[7 3 9 9]]
关于python - 一维数组和二维数组之间的逐行笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64001207/