【问题标题】:creating a new array from an existing list从现有列表创建新数组
【发布时间】:2020-05-10 08:59:03
【问题描述】:

我有一个给定的数组,我想从第一个值开始获取每个第三个值并将其附加到一个新列表中。我可以取我想要的值,但它以1 x 28 数组的形式返回。我希望它以4 x 7 数组的形式返回。我怎么知道当它到达第一行的末尾时开始新的一行?

代码:

import numpy as np

list = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
    [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
    [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
]
newlist = []
list = np.array(list)
for row in list:
    k = 0
    for value in row:
        if k % 3 == 0:
            newlist.append(value)
        else:
            pass
        k += 1
newlist = np.array(newlist)
print(newlist)

输出:

[ 1  4  7 10 13 16 19  2  5  8 11 14 17 20  3  6  9 12 15 18 21  4  7 10 13 16 19 22]

期望的输出:

[[ 1  4  7 10 13 16 19 ][ 2  5  8 11 14 17 20 ][ 3  6  9 12 15 18 21 ][ 4  7 10 13 16 19 22]]

【问题讨论】:

    标签: python arrays list numpy append


    【解决方案1】:

    你应该可以用l[:,::3]直接索引这个:

    import numpy as np
    
    l = np.array([
        [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
        [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
        [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
    ])
    
    l[:,::3]
    

    结果

    array([[ 1,  4,  7, 10, 13, 16, 19],
           [ 2,  5,  8, 11, 14, 17, 20],
           [ 3,  6,  9, 12, 15, 18, 21],
           [ 4,  7, 10, 13, 16, 19, 22]])
    

    (另外,不要将变量命名为 list)

    【讨论】:

      【解决方案2】:

      尝试使用带有列表理解的::3 切片:

      l = [
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
          [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
          [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
          [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
      ]
      print(np.array([i[::3] for i in l]))
      

      要了解有关切片的更多信息,请查看此处:

      Understanding slice notation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 2021-07-10
        • 2021-01-02
        • 2021-03-09
        • 2021-06-10
        • 2020-03-08
        • 1970-01-01
        相关资源
        最近更新 更多