我有一个形状为x,y,z的numpy数组,它表示x由y的z个矩阵。我可以对每个矩阵进行切片,然后使用带有百分位的clip过滤异常值:

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


是否有某种有效的方法可以一次执行一次而不做一个切片?

最佳答案

您可以将数组传递给np.clip,因此在zmx维度上可能会有不同的限制:

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)

关于python - 使用每个切片的百分比过滤多维numpy数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59921404/

10-16 16:22