Я не совсем понимаю, как обрабатывать NAN в функции Maximum_filter.Я ожидал, что либо NAN будут проигнорированы, либо лучше, если где-нибудь в ядре появится nan, и в результате получится NAN.Вместо этого к NAN, похоже, относятся по-разному в зависимости от места появления
Проблема, похоже, немного похожа на Scipy Maximum_filter сумасшедший
Вот пример кода, сделанного с версией Scipy 0.19.1:
import numpy as np
import scipy.ndimage.filters
a = np.array([[ 0, 0., 1., 2., 3., 4.],
[ 0., np.nan, 1., 2., 3., 2.],
[ 0., 0., 1., 2., 3., 4.],
[ 1., 0., 1., 2., 3., 4.]])
b = np.array([[np.nan, 0., 1., 2., 3., 4.],
[ 0., 0, 1., 2., 3., 2.],
[ 0., 0., 1., 2., 3., 4.],
[ 1., 0., 1., 2., 3., 4.]])
c = np.array([[np.nan, 0., 1., 2., 3., 4.],
[ 0., np.nan, 1., 2., 3., 2.],
[ 0., 0., 1., 2., 3., 4.],
[ 1., 0., 1., 2., 3., 4.]])
print(scipy.ndimage.filters.maximum_filter(a, size=3))
print(scipy.ndimage.filters.maximum_filter(b, size=3))
print(scipy.ndimage.filters.maximum_filter(c, size=3))
Предоставление вывода
[[ 0. 1. 2. 3. 4. 4.]
[ 0. 1. 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]]
[[ nan nan 2. 3. 4. 4.]
[ nan nan 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]]
[[ nan nan 2. 3. 4. 4.]
[ nan nan 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]
[ 1. 1. 2. 3. 4. 4.]]
В «a» NAN игнорируется, в «b» кажется, что каждое сравнение с NAN приводит к NAN, а «c» дает точно такой же результат, как «b».".
Вопросы:
1. Это ошибка или поведение может быть как-то оправдано?
2. Как я могу получить результат" b "для NAN не в верхнем левом углу?