【问题标题】:Merge two numpy arrays into a list of lists of tuples将两个 numpy 数组合并到元组列表中
【发布时间】:2019-02-28 21:13:09
【问题描述】:

我无法弄清楚这一点。感谢您的帮助:

有:

>>> x = np.array([[1,2],[5,6]])
>>> x
array([[1, 2],
       [5, 6]])
>>> y = np.array([[3,4],[7,8]])
>>> y
array([[3, 4],
       [7, 8]])

想要:

>>> z = [[(1,2),(3,4)],[(5,6),(7,8)]]
>>> z
[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

【问题讨论】:

标签: python numpy


【解决方案1】:

试试这个:

x_z = map(tuple,x)
y_z = map(tuple,y)
[list(i) for i in zip(x_z, y_z)]

输出:

[[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

【讨论】:

  • 谢谢,这看起来是最直接的解决方案。
【解决方案2】:

这是一个有趣的问题。这是我想出的:

print([list(map(tuple, i)) for i in zip(x, y)])
# [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

基本上,压缩 x 和 y 可以得到:

[(array([1, 2]), array([3, 4])), (array([5, 6]), array([7, 8])]

然后你首先将每个元素转换为一个列表,然后是一个元组

【讨论】:

    【解决方案3】:
    x = list([[1,2],[5,6]])
    y = list([[3,4],[7,8]])
    x
    [[1, 2], [5, 6]]
    y
    [[3, 4], [7, 8]]
    z=list(zip(x,y))
    z
    [([1, 2], [3, 4]), ([5, 6], [7, 8])]
    

    【讨论】:

    • 谢谢,但这会产生列表元组的列表,而不是请求的元组列表。
    【解决方案4】:

    如果你想遍历每个矩阵的行,你可以这样做:

    for (row1, row2) in zip(x,y):
        yield [tuple(row1), tuple(row2)]
           #  [ (1,2)     ,  (3,4)     ]
    

    这将为您提供一个生成器(如果您将其包装在一个函数中),但您需要一个列表。因此,请将其包装在一个理解中:

    [ [tuple(row1),tuple(row2)] for (row1, row2) in zip(x,y) ]
    

    【讨论】:

    • 您应该指定yield 版本需要在函数定义中
    【解决方案5】:

    IIUC

    z=np.array([x,y])
    [list(map(tuple,z[:,x]))for x in range(len(x))]
    Out[223]: [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
    

    【讨论】:

      【解决方案6】:

      不管怎样,这里是最简单和最有效的(但可能是最不通用的)解决方案:

      result = [[(x[0,0], x[0,1]), (y[0,0], y[0,1])],
               [(x[1,0], x[1,1]), (y[1,0], y[1,1])]]
      

      输出:

      [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]
      

      诚然,它不能泛化,但问题是——需要泛化到哪个方向?更长的外部尺寸?更长的内部尺寸?这个问题不需要任何概括。

      根据明确规定的要求,当然可以修改此解决方案以使其根据需要进行推广

      【讨论】:

        猜你喜欢
        • 2020-02-16
        • 2011-08-27
        • 2021-11-28
        • 2021-11-11
        • 2020-02-19
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多