代码之家  ›  专栏  ›  技术社区  ›  deppep

将元组列表解压缩为numpy数组

  •  1
  • deppep  · 技术社区  · 3 年前

    考虑元组列表,例如:

    a = [(1,2), (3,4)]
    

    我经常发现自己试图将这样的列表解压缩为每个列值的单独列表,例如:

    b,c = list(zip(*a))
    

    在这种情况下, b 将是一个包含值的列表 1 3 .

    我经常发现自己缺乏自我 b c 要成为numpy数组,请不要列出。 在这种情况下,我通常会做的是:

    b,c = list(zip(*a))
    b = np.array(b)
    c = np.array(c)
    

    最后两行看起来很累赘。 有没有任何方法可以将列表直接解压缩为两个numpy数组,而不直接通过 numpy.array ?

    非常感谢。

    0 回复  |  直到 3 年前
        1
  •  2
  •   alani    3 年前

    您的元组列表可以通过调用转换为二维numpy数组 np.array 然后,这可以被转置,然后使用元组分配沿着第一维度被解包:

    b, c = np.array(a).T
    

    这里给出:

    >>> import numpy as np
    >>> a = [(1,2), (3,4)]
    >>> b, c = np.array(a).T   # or:  np.array(a).transpose()
    >>> b
    array([1, 3])
    >>> c
    array([2, 4])
    

    注意:您将有一个临时数组,其元素数量与 a ,因此它可能比原始解决方案的内存效率更低,特别是如果您要拆包到更多的1d阵列中。