Python 阵列的笛卡尔积.第2部分
我最近发布的帖子,得到了很好的回复,有点超出了我目前的能力。考虑两个NUMPY 2D数组V1和V2,它们是<强>相同< /强>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],
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]]
你尝试了什么?