我有一个列表列表,其格式如下(类似于方阵):
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])
答案 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]]