Python 阵列的笛卡尔积.第2部分

Python 阵列的笛卡尔积.第2部分,python,arrays,numpy,Python,Arrays,Numpy,我最近发布的帖子,得到了很好的回复,有点超出了我目前的能力。考虑两个NUMPY 2D数组V1和V2,它们是相同< /强> V1 = np.array([[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]) V2 = np.array([[1, 2], [1, 3],

我最近发布的帖子,得到了很好的回复,有点超出了我目前的能力。考虑两个NUMPY 2D数组V1和V2,它们是<强>相同< /强>

V1 = np.array([[1, 2],
               [1, 3],
               [1, 4],
               [2, 3],
               [2, 4],
               [3, 4]])

V2 = np.array([[1, 2],
               [1, 3],
               [1, 4],
               [2, 3],
               [2, 4],
               [3, 4]])

现在,我的目标是构造一个numpy数组V,它有4列。将其视为numpy数组V1和V2的笛卡尔积。V的前两列中的条目是V1中的行,V的后两列中的条目是V2中的行

这是困难的部分-有一个棘手的条件:在V的每一行中,前两列中至少有一个条目必须在后两列中匹配。 对于这里描述的简单示例,V应该如下所示:

V = np.array([[1,2,  1,2]
             [1,2,  1,3]
             [1,2,  1,4]
             [1,2,  2,3]
             [1,2,  2,4]

             [1,3,  1,2]
             [1,3,  1,3]
             [1,3,  1,4]
             [1,3,  2,3]
             [1,3,  3,4]

             [1,4,  1,2]
             [1,4,  1,3]
             [1,4,  1,4]
             [1,4,  2,4]
             [1,4,  3,4]

             [2,3,  1,2]
             [2,3,  1,3]
             [2,3,  2,3]
             [2,3,  2,4]
             [2,3,  3,4]

             [2,4,  1,2]
             [2,4,  1,4]
             [2,4,  2,3]
             [2,4,  2,4]
             [2,4,  3,4]

             [3,4,  1,3]
             [3,4,  1,4]
             [3,4,  2,3]
             [3,4,  2,4]
             [3,4,  3,4]])

基于您上一个问题的答案:

r,c = np.nonzero(np.equal.outer(V1,V2).any(axis=(1,3)))
np.c_[V1[r], V2[c]]
当然,您也可以同样地应用于前面问题中提出的其他答案

输出:

np.array_equal(V,np.c_[V1[r], V2[c]])
#True


[[1 2 1 2]
 [1 2 1 3]
 [1 2 1 4]
 [1 2 2 3]
 [1 2 2 4]
 [1 3 1 2]
 [1 3 1 3]
 [1 3 1 4]
 [1 3 2 3]
 [1 3 3 4]
 [1 4 1 2]
 [1 4 1 3]
 [1 4 1 4]
 [1 4 2 4]
 [1 4 3 4]
 [2 3 1 2]
 [2 3 1 3]
 [2 3 2 3]
 [2 3 2 4]
 [2 3 3 4]
 [2 4 1 2]
 [2 4 1 4]
 [2 4 2 3]
 [2 4 2 4]
 [2 4 3 4]
 [3 4 1 3]
 [3 4 1 4]
 [3 4 2 3]
 [3 4 2 4]
 [3 4 3 4]]

你尝试了什么?