以统一的方式缩放值?

Scale values in uniform way?

我有一个数字数组,我将其转换为百分比([0 .. 1] 范围内的值)。然后我将其转换为灰色。

示例:

 percentage = nums/float(nums.max())

问题是大多数值都是小数字和几个大数字。这导致大部分 % 都在 0.01 左右。 结果是这转化为 ~~白色,在绘图时变得不可见。 顺便说一句,我必须保留所有值。

我试图缩小异常值 abit ,但即使这样也无济于事 ;(

 colors[abs(colors - np.mean(colors)) > 2 * np.std(colors)] = colors.mean() + 2 * np.std(colors)
 c = colors/float(colors.max()) #convert to percentage

这样做的目的是将异常值缩小到平均值的 2std。

我想我需要的是某种 "step-wise" 函数,它以均匀缩放的方式对值进行分组 在 0 .. 1 范围内,以便每个点都接收到可见颜色,但仍保持一定的对比度,以便区分值。

PS> 可能范围必须在 0.1 到 1 之间!

=====

到目前为止,这是某种解决方案:

 c += 0.15 * (1-c) 

想到平时的修图,剪掉一些值会不会是一种解决方案?然后,通常的排序可能会有所帮助,例如

highlights=np.sort(nums)[-xyz:]

只需将这些值设置为下一个较小的值即可设置为白色。

当然这可能是对数据的严重操纵,但这是您在调整颜色曲线时通常在 GIMP 或类似的照片处理软件中所做的。因此,如果这些异常值就像不稳定的像素,而您实际上对中间的灰度值感兴趣,这可能会有所帮助。

我希望,我得到了你的兴趣, 乐帕克

到目前为止,这是最好的解决方案:

c += 0.15 * (1-c)