使用numpy将一个数组中的5%最大值更改为某个值

时间:2016-04-06 09:10:03

标签: python numpy

我有一个200x200的数组,其值从-600到100.我希望保持95%的正值不变,并将5%的最大正值设置为95%的值。负面是相同的。

这是我的代码,它太丑了,我希望改进。

PageBreakBefore

下面的直方图是数组的值。

enter image description here

2 个答案:

答案 0 :(得分:3)

要写得更短,可以使用numpy.percentile (numpy docs)。:

def cutter(data, percent):
    pc = np.percentile(data[data>0], percent)
    data[data>pc] = pc

cutter(x, 95)
x *= -1
cutter(x, 95)
x* = -1

答案 1 :(得分:0)

首先,计算所有正值的第95个百分点:

flat_x = np.sort(np.ravel(x[x > 0]))
pctl_idx = int(0.95 * len(flat_x))
pctl = flax_x[pctl_idx]

然后将每个大于此的元素设置为此值:

x[x > pctl] = pctl