Python中的转换矩阵

时间:2019-10-16 07:41:09

标签: python python-3.x math matrix interpolation

我在3D空间中的比例从-10到10,步长为2.5([-10,-7.5,-5,-2.5,0,2.5,5,7.5,10])。 我有一个如此规模的3D点,我想将其映射到另一个3D空间中,步长为1([0,1,2,3,4,5,6,7,8]),从0到8。

我该怎么办?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

this stack exachange post中,您可以找到范围内归一化的数学公式。 python的实现如下:

df = pd.concat([df1, df2, df3], sort=True).sort_values('fix_col').ffill().bfill()
print (df)
  col1 col2 col3 col4 col5 col6  fix_col
0    p    q    t    u    x    r        1
0    p    q    t    u    x    r        2
1    q    e    t    u    x    r        4
0    q    e    t    u    x    r        5
1    q    e    v    w    x    r        6
2    x    y    v    w    x    r        7

您的要求不是很清楚,如果您的数据需要映射到离散范围内(逐步四舍五入),则可以执行以下操作:

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