Правильный способ получить массивную форму массива - PullRequest
0 голосов
/ 27 октября 2019

При работе с 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

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