我在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。
我该怎么办?
感谢您的帮助
答案 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