我有一个200x200的数组,其值从-600到100.我希望保持95%的正值不变,并将5%的最大正值设置为95%的值。负面是相同的。
这是我的代码,它太丑了,我希望改进。
PageBreakBefore
下面的直方图是数组的值。
答案 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