自动导出数组比例和偏移值的方法

时间:2019-06-18 14:11:22

标签: python numpy compression

我正在开发的应用程序的一部分要求我对Python中的值(或数组)应用比例因子和偏移量,以减少其内存占用量(以便在保存到文件时,最终使文件大小变小)例如,可以通过存储uint16而不是float来实现)。链接到:Module/Method to Optimise Memory Footprint of a NumPy Array

目前,它看起来如下:

def get_scale_and_offset(values_range, input_value, dtype=np.uint16):

    target_max = np.iinfo(dtype).max
    target_min = np.iinfo(dtype).min
    target_range = target_max - target_min

    # Effective range of data
    input_min = min(values_range)
    input_range = max(values_range)-min(values_range)

    # Calculate scale factor
    scale_factor = input_range / target_range

    # Calculate offset to bring the minimum to target_minimum
    offset = input_min - target_min    


    print(input_value * scale_factor + offset)

get_scale_and_offset([0, 1000], 68.235)
>>> 68.22499427786678

如您所见,一旦应用了比例因子和偏移量,输入值将与输出值不同。我知道这与scale_factor的小数位数/有效数字有关,但我想知道是否有人有其他选择?

我知道我可以使用.astype(np.unit16)直接将值/数组强制为np.uint16,但是那样会降低精度。我想要68.235进入,缩放和偏移,然后68.235出来。

注意::传入的值并不总是具有3个有效数字,可以更大,可以更小-此方法应该简单地缩放和偏移值以将它们转换为uint16而不会损失精度。

0 个答案:

没有答案