我正在开发的应用程序的一部分要求我对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而不会损失精度。