При работе с numpy ndarray я обычно получаю форму массива (скажем, для трехмерного массива):
data = np.random.rand(10, 10, 10)
X, Y, Z = data.shape
# returns (10, 10, 10) as expected
Теперь, если у меня есть маскированный массив с тем же размером, и я хочу только числоиз немаскированных значений я не могу использовать mdata.shape
, так как я получу общее количество элементов, включая маскированные значения. Обходной путь, который я нашел, для маскируемого массива mdata:
mdata = data.view(np.ma.MaskedArray)
mdata.mask = mdata<1
X, Y, Z = (np.ma.count(mdata, axis=0),
np.ma.count(mdata, axis=1),
np.ma.count(mdata, axis=2))
# (np.ma.count(data, axis=0), np.ma.count(data, axis=1), np.ma.count(data, axis=2)) :
# also works with ndarray data
Мой вопрос заключается в следующем: есть ли более чистый способ получить количество «допустимых» элементов в каждом измерении массива, в маске или нет? ?
Приветствия
Редактировать: в примере изменено «размер» на «количество» + MWE