用Python方法获取列表列表中相邻值的平均值

时间:2019-10-10 06:05:51

标签: python numpy

我有一个列表列表,其格式如下(类似于方阵):

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]的平均值,依此类推。

我如何以pythonic方式实现这一目标?

非常感谢您的任何建议!

已编辑:

感谢您指出此答案之前已得到回答-看来我的问题还不够清楚。无论如何,改编自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])

2 个答案:

答案 0 :(得分:0)

如果我正确理解了“ 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)

答案 1 :(得分:0)

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

mat-menu

您还可以使用不易理解的列表理解:

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]]