将3d坐标的矢量标准化为0到1之间

时间:2013-10-10 14:51:40

标签: 3d coordinates normalization

我有一个巨大的3D坐标向量,我想对它们进行标准化,使它们位于维度[0,1] x [0,1] x [0,1]的立方体内(即每个x,y ,坐标的z应该在0和1之间,我正在做的是将所有坐标除以该向量中3D坐标的最大长度,但是这样我就不能用负值处理坐标。有谁能建议将这些坐标标准化的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

将每个组件除以向量的长度:

length = sqrt(x ^ 2 + y ^ 2 + z ^ 2)

所以你的标准化向量是:

v =(x /长度,y /长度,z /长度)

答案 1 :(得分:0)

作为示例,我们定义一个称为v的矩阵:

import numpy as np

v = np.array([[[-1,2,3], [4,5,6]]])
v
array([[[-1,  2,  3],
        [ 4,  5,  6]]])

我在这里要做的第一件事是查看最小和最大之间当前的数字范围。由于我们希望最小值为0.0,最大值为1.0,因此必须在旧数值范围之间除以新范围(1.0-0.0,最大值减去最小值),即1.0。

scaled_unit = 1.0 / (np.max(v) - np.min(v))

通过这种划分,可以达到新单元的要求。

要将每个旧值转换为新值,我们将其乘以缩放单位,然后再次减去最小值乘以缩放单位。

v*scaled_unit - np.min(v)*scaled_unit
array([[[0.        , 0.42857143, 0.57142857],
        [0.71428571, 0.85714286, 1.        ]]])

然后,我们获得所有值以保持它们之间的比例,并将其包含在最小值的0.0和最大值的1.0之间。

重要提示:仅当所有值的大小都相同时,才可以使用此解决方案。如果某些数字代表米,而其他千克则应独立缩放。