Должен ли массив масок (bool) в numpy-ma становиться нулями после изменения значений соответствующего массива замаскированных данных? - PullRequest
0 голосов
/ 10 ноября 2019

Массив маски (массив mask_bool) с типом bool стал нулями после изменения маскированного массива (массив данных x). Не только вышеописанный результат, но, если вы сначала замаскировали массив маской типа с плавающей точкой (массив mask_float), то вы изменили тип маски на логическое значение. Маска не станет нулями, даже если вы изменили значения в замаскированном массиве.

Протестировано в:

  • Python 3.6.8 (по умолчанию, 27 июня 2019 г., 20:02: 05) [GCC 8.3.0] в linux
  • Python 2.7.16 (по умолчанию, 27 июня 2019, 20:01:40) Информация о версии Numpy / Python:

numpyпротестировано:

  • версия 1.15.4 2.7.16 (по умолчанию, 27 июня 2019 г., 20:01:40) [GCC 8.3.0]
  • версия 1.15.4 3.6.8(по умолчанию, 27 июня 2019, 20:02:05) [GCC 8.3.0]
import numpy as np
import numpy.ma as ma
x     =  np.zeros((138,195))
x[:]  =  99
mask  =  np.zeros((138,195))
mask[:]  =  1

print("if mask is bool")
mask  =  mask.astype(bool)
x=ma.masked_array(x, mask=mask)
print("bef the sum of mask is",np.sum(mask))
x[:]=1
print("aft the sum of mask is",np.sum(mask))


mask  =  np.zeros((138,195))
mask[:]  =  1
mask  =  mask.astype(float)
x=ma.masked_array(x, mask=mask)
print("if mask is not bool")
print("bef the sum of mask is",np.sum(mask))
x[:]=1
print("aft the sum of mask is",np.sum(mask))

print("however now if mask is bool")
mask  =  mask.astype(bool)
x=ma.masked_array(x, mask=mask)
print("bef the sum of mask is",np.sum(mask))
x[:]=2
print("aft the sum of mask is",np.sum(mask))

Вот проводной вывод:

if mask is bool
bef the sum of mask is 26910
aft the sum of mask is 0
if mask is not bool
bef the sum of mask is 26910.0
aft the sum of mask is 26910.0
however now if mask is bool
bef the sum of mask is 26910
aft the sum of mask is 26910

Я могу понять дляВ первом случае маска не копируется, но во втором и третьем случае маска была скопирована. Тем не менее, я не думаю, что этот дизайн очень интуитивно понятен. Я работал с питоном более пяти лет, не очень опытный, но я и не новичок. Мне нравится дзен питона.

"In the face of ambiguity, refuse the temptation to guess.
"

Я думаю, что этот дизайн противоречил дзен питона. Есть ли какая-либо причина или лучший способ предотвратить возникновение этой путаницы? Есть ли другой подобный выход Гочи в NumPy?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...