【发布时间】:2021-03-06 12:49:50
【问题描述】:
我有一个二维矩阵。我想将每个值与其周围框中的值的平均值进行比较(不包括值本身)。如果该值大于平均值加上 3sigma,它将被框中值的平均值替换。然后我在矩阵上重复这个过程五次。 所以,我有这些代码在我的小示例矩阵中工作得很好,但是当我转到真正的(750X2000)时,它需要永远运行。有没有办法加快这个循环?我对 python 比较陌生,所以也许有一些我没有看到的基本的、明显的东西。
import numpy as np
mat= [[ 0 , 2 , 4 , 60000 , 8],[10 ,12, 14000, 16, 18],[20 ,22, 625, 26, 28],[30, 32,34, 36, 38],[10000, 42, 44, 46, 48]]
mat=np.array(mat)
print(mat)
print(mat.shape[0])
print('###############')
b=0
while b<5:
for i in range(mat.shape[0]):
for j in range(mat.shape[1]):
chunk = mat[max(0,i-1):i+2, max(0,j-1):j+2]
c = np.setdiff1d(chunk,mat[i,j])
media_c=np.mean(c)
#print(media_c)
sdv=np.std(c)
if mat[i,j]>media_c+3*sdv:
mat[i,j]=media_c
b+=1
print(mat)
【问题讨论】:
标签: python performance matrix multidimensional-array