【发布时间】:2020-10-03 23:29:24
【问题描述】:
给定如下的 [x,y] 数组,我想返回一个新数组,其中包含 3x3 子数组的平均值。例如。以下数组:
image = [[7, 4, 0, 1],
[5, 6, 2, 2],
[6, 10, 7, 8],
[1, 4, 2, 0]]
应该返回
new_image = [[5, 4],
[4, 4]]
我已经做到了这一点,我可以将新数组作为表单列表获取:
new_image = [5,4,4,4]
这是我的方法:
h = list(range(1,len(image)-1))
w = list(range(1,len(image[0])-1))
def square_sum(image,i,j):
sum = image[i-1][j-1] + image[i-1][j] + image[i][j-1] + image[i+1][j] + image[i][j+1] + image[i+1][j+1] + image[i][j] + image[i-1][j+1] + image[i+1][j-1]
return sum//9
new_image = []
for i in h:
for j in w:
new_image.append(square_sum(image,i,j))
return(new_image)
所以我的问题是如何让我的输出成为一个数组而不是一个列表。 (我已经意识到用 Numpy 做这件事要容易得多,但想看看我如何才能按照上述方法解决它)。
【问题讨论】:
-
我不明白这些值中的任何一个如何平均为 5 或 4
-
@NicolasGervais 我已经编辑了问题来解释 - 这是 3x3 的平均值。
-
嗨,就像原始数组中每个元素周围的 3x3 子数组的平均值一样。例如。在原始数组中取 [1,1] = 6。以 6 为中心的 3x3 子数组之和为 47。因此,平均值为 5。
-
这可能是相关的 - stackoverflow.com/questions/43086557/…(使用 3x3 卷积过滤器,其中每个值都是 1/9)。