Подтвердить что ты не робот

Как создать гистограмму массива с замаскированными значениями в Numpy?

В Numpy 1.4.1, что является простейшим или наиболее эффективным способом вычисления гистограммы маскированного массива? numpy.histogram и pyplot.hist по умолчанию подсчитывают маскированные элементы!

Единственное простое решение, о котором я сейчас думаю, связано с созданием нового массива с немасштабированным значением:

histogram(m_arr[~m_arr.mask])

Это не очень эффективно, поскольку это излишне создает новый массив. Я был бы рад прочитать о лучших идеях!

4b9b3361

Ответ 1

(Undeleting это согласно обсуждению выше...)

Я не уверен, считают ли разработчики numpy этой ошибкой или ожидаемым поведением. Я спросил в списке рассылки, поэтому, я думаю, мы увидим, что они говорят.

В любом случае это легко исправить. Патч numpy/lib/function_base.py для использования numpy.asanyarray, а не numpy.asarray на входах функции позволит ему правильно использовать маскированные массивы (или любой другой подкласс ndarray) без создания копии.

Изменить: похоже, это ожидаемое поведение. Как обсуждалось здесь:

Если вы хотите игнорировать маскированные данные, это просто при вызове дополнительной функции

Гистограмма (m_arr.compressed())

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

Использование asanyarray также позволит матрицы в и других подтипах, которые может быть неправильно обработано гистограммы.

Для чего угодно, кроме сброса замаскированные наблюдения, это было бы необходимо выяснить, что определение маскированной матрицы гистограммы как указал Брюс.

Ответ 2

Попробуйте hist(m_arr.compressed()).

Ответ 3

Это очень старый вопрос, но в наши дни я просто использую:

numpy.histogram(m_arr, bins=.., range=.., density=False, weights=m_arr_mask)

Где m_arr_mask - массив с той же формой, что и m_arr, состоящий из 0 значений для элементов m_arr для исключения из гистограммы и 1 значения для элементов, которые должны быть включены.