【问题标题】:How to reduce 1xn dimensional list to 1 dimensional list如何将 1xn 维列表减少为 1 维列表
【发布时间】:2017-10-08 20:22:42
【问题描述】:

当我想转置一个类似列的numpy数组时,比如,

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

到一个类似行的 numpy 数组,我期望它是这样的,

b = array([1,2,3])

但是当我转置 a 时,我只得到一个 1x3 维数组,

>>> a.transpose()
>>> array([[1,2,3]])

我不知道如何解决它。

【问题讨论】:

    标签: python data-manipulation


    【解决方案1】:

    如果你使用numpynumpy.transpose 不会改变数组的维数; a 如果最初是 2d 数组,它仍然是 2d 数组,您需要将其展平以将其从 2d 减少到 1d

    import numpy as np
    a = [[1],
         [2],
         [3]]
    
    np.ravel(a)
    #array([1, 2, 3])
    
    np.squeeze(a)
    #array([1, 2, 3])
    
    np.array(a)[:,0]
    # array([1, 2, 3])
    

    【讨论】:

    • @randomir OP 说 transpose,听起来像一个 numpy 术语。
    • @randomir 当然。当我说听起来像时,我不确定。 -
    • @我很抱歉这个问题没有明确声明,但是是的,我只是在谈论一个 numpy 数组。你提供的所有方法都是可行的,而我只是使用 a.flatten() 来解决这个问题。
    【解决方案2】:
    a = [[1],
         [2],
         [3]]
    b=[i for sl in a for i in sl]
    print(b)
    

    输出

    [1, 2, 3]
    

    解释
    使用list comprehension

    [
    i             #Take as a member of the final list
    for sl in a   #iterate over all sublists in a
    for i in sl   #iterate over each i in sublist
    ]
    

    更新

    OR 你可以这样做,(但我建议使用列表推导,因为它内联完成所有操作,没有函数调用的开销)

    b=transposed_list[0]
    

    【讨论】:

    • 我明白了。但很抱歉,我没有明确说明我的数据类型实际上是 numpy 数组。所以也许一个 numpy 方法更有效。不管怎样,你的回答很有价值。
    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    • 2013-05-17
    • 2014-11-28
    相关资源
    最近更新 更多