【问题标题】:Cartesian Product of arrays - PART 2数组的笛卡尔积 - 第 2 部分
【发布时间】:2020-08-21 01:44:52
【问题描述】:

我最近发布的question 得到了很好的回答,但后续跟进工作有点超出了我目前的能力。考虑两个 相同 的 numpy 二维数组 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]])

【问题讨论】:

  • 你尝试了什么?

标签: python arrays numpy


【解决方案1】:

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

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]]

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2011-12-18
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2016-07-10
    相关资源
    最近更新 更多