【问题标题】:Pythonic way to get average of adjacent values in list of lists [duplicate]Pythonic获取列表列表中相邻值平均值的方法[重复]
【发布时间】:2023-03-04 13:03:01
【问题描述】:

我有一个如下形式的列表(类似于方阵):

a = [[1,2,3,4,5,6],
     [5,6,7,8,3,4],
     [9,8,4,6,2,1],
     [3,4,5,1,4,5],
     [4,3,7,8,1,4],
     [3,2,5,6,1,8]]

我想获得一个新的列表列表,其中 4 个相邻值形成一个正方形的平均值,即 new_list[0][0] 将是 [1+2+5+6] 的平均值,new_list[0][1] 将是 [3+4+7+8] 的平均值, new_list[0][2][5+6+3+4] 的平均值,以此类推。

我怎样才能以 Python 的方式实现这一点?

非常感谢您的任何建议!

已编辑:

感谢您指出这个答案之前已经回答过 - 我的问题似乎不够清楚。无论如何,改编自answer to this question,我得到了解决方案:

a = np.array(a)

a_new = np.zeros((3, 3))

for i in range(3):
  for j in range(3):
    a_new[i][j] = np.mean(a[i*2:2+i*2, j*2:2+j*2])

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我将只使用两个 for 循环并累积每个平方的平均值:

    from statistics import mean
    
    a = [[1,2,3,4,5,6],
         [5,6,7,8,3,4],
         [9,8,4,6,2,1],
         [3,4,5,1,4,5],
         [4,3,7,8,1,4],
         [3,2,5,6,1,8]]
    
    new_list = []
    for i in range(len(a) - 1):
        row = []
        for j in range(len(a[i]) - 1):
            square = a[i][j], a[i][j+1], a[i+1][j], a[i+1][j+1]
            row.append(mean(square))
        new_list.append(row)
    
    print(new_list)
    # [[3.5, 4.5, 5.5, 5, 4.5], [7, 6.25, 6.25, 4.75, 2.5], [6, 5.25, 4, 3.25, 3], [3.5, 4.75, 5.25, 3.5, 3.5], [3, 4.25, 6.5, 4, 3.5]]
    

    您也可以使用可读性较差的列表理解:

    [[mean((a[i][j], a[i][j+1], a[i+1][j], a[i+1][j+1])) for j in range(len(a[i]) - 1)] for i in range(len(a) - 1)]
    

    【讨论】:

    • 谢谢!类似于下面 meTchaikovsky 的回答 - 这还不是我想要的,我不希望正方形重叠,即 new_list[0][1] 是 3+4+7+8 的平均值,而不是 2+3+ 6+7
    【解决方案2】:

    如果我正确理解了“4 个相邻值”(右下角),您可以这样做

    a = np.array(a)
    
    # create a placeholder
    placeholder = []
    for id_r, row in enumerate(a[::2]):
        tmp = []
        for id_c, col in enumerate(row[::2]):
            tmp.append(np.mean(a[id_r: id_r + 2, id_c: id_c + 2]))
        placeholder.append(tmp)
    

    【讨论】:

    • 非常感谢。这几乎是我想要的,但我不希望方块重叠,所以在这种情况下占位符 [0] 的长度将为 3。我该怎么做?
    • @cirnelle 已经编辑了答案
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2021-03-18
    • 2022-06-14
    • 2020-04-24
    相关资源
    最近更新 更多