Python 将数组中的单元格更改为其平均值';s的周围环境,用于整个阵列

Python 将数组中的单元格更改为其平均值';s的周围环境,用于整个阵列,python,arrays,image-preprocessing,Python,Arrays,Image Preprocessing,我希望遍历一个数组并找到异常(特别是大于100的值) 然后我想用周围细胞的平均值来代替异常细胞 假设输入为: [6, 28, 33] [20, 100, 41] [87, 3, 39] [6, 28, 33] [20, 32, 41] [87, 3, 39] 我想把那100个单元格换成平均值的整数 6,28,33,20,41,87,3,39 哪一个是32 输出应为: [6, 28, 33] [20, 100, 41] [87, 3, 39] [6, 28, 33] [20, 32, 41]

我希望遍历一个数组并找到异常(特别是大于100的值)

然后我想用周围细胞的平均值来代替异常细胞

假设输入为:

[6, 28, 33]
[20, 100, 41]
[87, 3, 39]
[6, 28, 33]
[20, 32, 41]
[87, 3, 39]
我想把那100个单元格换成平均值的整数

6,28,33,20,41,87,3,39

哪一个是32

输出应为:

[6, 28, 33]
[20, 100, 41]
[87, 3, 39]
[6, 28, 33]
[20, 32, 41]
[87, 3, 39]
如果有必要的话,我的实际数组是256*256个单元格,并且有大约500个值需要更改

最后一点

我知道修复边缘会有一个问题,所以我不在乎它们是否被完全抛出,或者一些聪明的代码片段在没有它们的情况下会变得平均

以下是我的尝试:

import numpy as np
array = np.random.randint(100, size=(256, 256))
    for x in array
    if x>=100:
        x = np.mean(x+1,x-1) 
#This is where I got stuck... trying to define the surrounding cells

所以我知道这可能不是最有效的解决方案,但它是有效的。如果异常位于数组的边缘,它只获取数组前后的平均值,而不是两者

inp =   [[6, 10, 33],
        [20, 100, 41],
        [87, 3, 39]]


for i in range(len(inp)):
    for j in range(len(inp[i])):
        if inp[i][j] >= 100:
            if i == len(inp) - 1:
                inp[i][j] = int((sum(inp[i])-inp[i][j] + sum(inp[i-1])) / (len(inp[i])-1 + len(inp[i-1])))
            elif i == 0:
                inp[i][j] = int((sum(inp[i])-inp[i][j] + sum(inp[i+1])) / (len(inp[i])-1 + len(inp[i+1])))
                print(inp[i][j])
            else:
                inp[i][j] = int((sum(inp[i])-inp[i][j] + sum(inp[i+1]) + sum(inp[i-1])) / (len(inp[i])-1 + len(inp[i+1]) + len(inp[i+1])))

同样,这个解决方案也不是特别有效或漂亮,但它确实起到了作用。

对于边缘来说,将其视为右边缘连接到左边缘,底部连接到顶部是有意义的,还是相反边缘的值会非常不同,不适合平均值?当然,还有一个问题是如何处理大于100的相邻值……或者如果在极端情况下,矩阵的整个区域的值都超过100,该怎么办。除了这些问题外,这似乎是一个非常简单的问题。请重新获取、阅读和,并提供一个。“为我实现此功能”是本网站的主题。你必须做出诚实的尝试,然后问一个关于你的算法或技术的具体问题。如果你曾经尝试过,你的问题应该包括你尝试过的东西,并询问具体出了什么问题。@AndrewAllaire把边缘包起来是没有意义的。对于大于100的相邻值或整个区域,我没有考虑过!这些观点如此分散,我没有想到。“我不知道该怎么处理它。”普拉纳沃桑加迪补充道。我想我的麻烦在于定义周围的细胞