Метод для автоматического вывода масштаба и значений смещения - PullRequest
0 голосов
/ 18 июня 2019

Часть приложения, которое я разрабатываю, требует от меня применения масштабного коэффициента и смещения к значению (или массиву) в Python, чтобы уменьшить его объем памяти (чтобы при сохранении в файл я в конечном итоге уменьшал размер файла)например, сохраняя uint16 вместо float, например).Это связано с: модулем / методом для оптимизации использования памяти массива NumPy

В настоящее время это выглядит следующим образом:

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, но мне было интересно, есть ли у кого-нибудь альтернативный подход?

Я знаю, что могу прямо форсировать значение / массив до np.uint16 использует .astype(np.unit16), но это потеряет точность.Я хочу, чтобы 68.235 входило, масштабировалось и смещалось, а 68.235 выходило.

ПРИМЕЧАНИЕ: Переданные значения не всегда будут иметь 3 значащие цифры, могут быть больше, могут быть меньше - этот метод должен просто масштабировать и смещать значение, чтобы преобразовать их в uint16 без потериточность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...