Матрица преобразования в Python - PullRequest
0 голосов
/ 16 октября 2019

У меня есть масштаб в трехмерном пространстве от -10 до 10 с шагом 2,5 ([-10,-7.5,-5,-2.5,0,2.5,5,7.5,10]). У меня есть 3D-точка в этой шкале, я хочу отобразить ее в другом 3D-пространстве от 0 до 8 с шагом 1 ([0,1,2,3,4,5,6,7,8]).

Как я могу это сделать?

Спасибо за помощь

1 Ответ

0 голосов
/ 16 октября 2019

В этом стековом посте вы найдете математическую формулу для нормализации в пределах диапазона. Реализация Python может быть следующей:

def normalize(values, curr_bounds, new_bounds):
    return [(x - curr_bounds[0]) * (new_bounds[1] - new_bounds[0]) / (curr_bounds[1] - curr_bounds[0] + new_bounds[0]) for x in values]

Ваш запрос не очень понятен, если ваши данные должны отображаться в дискретном диапазоне (округляется за шагом), то вы можете сделать это:

def normalize_step(values, curr_bounds, new_bounds, new_step):
    return [round_step(new_step, (x - curr_bounds[0]) * (new_bounds[1] - new_bounds[0]) / (curr_bounds[1] - curr_bounds[0] + new_bounds[0])) for x in values]

def round_step(step, n):
    return (n//step + 1) * step if n%step >= step/2 else n//step * step

Например, с учетом следующих данных:

current_bounds = (-10, 10)
new_bounds = (0, 8)
step = 1

values = [-10, -2.5, 0, 7.5, 2.5]

normalize(values, current_bounds, new_bounds)
# [0.0, 3.0, 4.0, 7.0, 5.0]

normalize_step(values, current_bounds, new_bounds, step)
# [0.0, 3.0, 4.0, 7.0, 5.0]

Примечание : в этом случае результат такой же, как у вашего step=1, если мы поставим step=1.5 изменение результатов:

normalize_step(values, current_bounds, new_bounds, 1.5)
# [0.0, 3.0, 4.5, 7.5, 4.5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...