Фильтровать многомерный массив numpy, используя процентиль каждого среза - PullRequest
1 голос
/ 26 января 2020

У меня есть массив numpy формы x, y, z, который представляет z матриц x по y. Я могу нарезать каждую из матриц, а затем использовать клип с процентилями, чтобы отфильтровать выбросы:

mx = array[:, :, 0]  # taking the first matrix
filtered_mx = np.clip(mx, np.percentile(mx, 1), np.percentile(mx, 99))

Есть ли какой-нибудь эффективный способ сделать то же самое, не делая это на срезе за раз?

1 Ответ

1 голос
/ 26 января 2020

Вы можете передавать массивы на np.clip, так что можно иметь разные пределы для измерения z mx:

import numpy as np

# Create random mx
x, y, z = 10, 11, 12
mx = np.random.random((x, y, z))

# Calculate the percentiles across the x and y dimension
perc01 = np.percentile(mx, 1, axis=(0, 1), keepdims=True)
perc99 = np.percentile(mx, 99, axis=(0, 1), keepdims=True)

# Clip array with different limits across the z dimension
filtered_mx = np.clip(mx, a_min=perc01, a_max=perc99)

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