У меня есть 2D-массив 2000x4000, и для каждой ячейки в массиве я должен сравнить значение ячейки со стандартным отклонением маски, сделанной 10 соседними ячейками (в + / - X и + / - Y).
Например, вот что я делаю сейчас:
import numpy as np
from astropy.stats import sigma_clipped_stats
BPmap=[]
N=10
a=np.random.random((2000,4000))
for row in range(N,a.shape[0]-N):
BPmap_row=[]
for column in range(N,a.shape[1]-N):
Bpmap_data=np.array(a[row-N:row+N,column-N:column+N].ravel())
mean, median, std = sigma_clipped_stats(Bpmap_data, sigma=3,iters=5)
BPmap_Nsigma=float(a[row][column]-median)/std
BPmap_row.append(BPmap_Nsigma)
BPmap.append(BPmap_row)
Это имеет очевидную проблему, что я делаю 2000x4000 = 8000000 циклов, и это занимает очень много времени. Мне нужно найти очень эффективный способ выполнения этих операций, но я понятия не имею, как.