Из списка 2D-координат и третьей переменной (скорости) я создал массив 2D numpy, охватывающий всю область выборки. Я намерен создать изображение, в котором каждый пиксель содержит среднюю скорость лежащих в нем точек. После этого фильтруйте это изображение с помощью гауссовского фильтра.
Проблема заключается в том, что область неравномерно отбирается. Поэтому у меня есть несколько пикселей без информации (Nan
) в середине изображения. Когда я пытаюсь фильтровать массив через гауссовский фильтр, Nan
распространяется, разрушая все изображение.
Мне нужно отфильтровать это изображение, но отбросить все пиксели без информации. Другими словами, если пиксель не содержит информации, он не должен учитываться для фильтрации.
Вот пример моего кода для усреднения:
Mean_V = np.zeros([len(x_bins), len(y_bins)])
for i, x_bin in enumerate(x_bins[:-1]):
bin_x = (x > x_bins[i]) & (x <= x_bins[i+1])
for j, y_bin in enumerate(y_bins[:-1]):
bin_xy = (y[bin_x] > y_bins[j]) & (y[bin_x] <= y_bins[j+1])
if (sum(x > 0 for x in bin_xy) > 0) :
Mean_V[i,j]=np.mean(V[bin_x][bin_xy])
else:
Mean_V[i,j]=np.nan
EDIT:
Серфинг в Интернете Я закончил этот вопрос, который я сделал в 2013 году. Решение этой проблемы можно найти в библиотеке астрофизики:
http://docs.astropy.org/en/stable/convolution/
Астропическая свертка заменяет пиксели NaN взвешенной по ядру интерполяцией от их соседей.
Спасибо, ребята!