这可能是一个愚蠢的问题,但由于某种原因,我不能得到三个向量矩阵的范数。
x矩阵中的每个向量代表三个不同实验中传感器(总共8个传感器)的x坐标。y和z也是如此。
例如:
x = [array([ 2.239, 3.981, -8.415, 33.895, 48.237, 52.13 , 60.531, 56.74 ]), array([ 2.372, 6.06 , -3.672, 3.704, -5.926, -2.341, 35.667, 62.097])]
y = [array([ 18.308, -17.83 , -22.278, -99.67 , -121.575, -116.794,-123.132, -127.802]), array([ -3.808, 0.974, -3.14 , 6.645, 2.531, 7.312, -129.236, -112. ])]
z = [array([-1054.728, -1054.928, -1054.928, -1058.128, -1058.928, -1058.928, -1058.928, -1058.928]), array([-1054.559, -1054.559, -1054.559, -1054.559, -1054.559, -1054.559, -1057.959, -1058.059])]
我试探着做着:
norm= np.sqrt(np.square(x)+np.square(y)+np.square(z))
x = x/norm
y = y/norm
z = z/norm
但是,我很确定这是错的,当我试着把np.sum(x[0])
的分量求和时,我没有得到接近1的结果。
1条答案
按热度按时间798qvoo81#
正规化并不会使分量之和等于1。正规化会使向量的范数等于1。您可以通过取正规化向量的范数(元素平方和的平方根)来检查代码是否正常工作。* 即 * 应该等于1。
据我所知,您的代码正在按预期工作。
我犯了一个错误-您的代码按预期工作,但不适合您的应用程序。您可以定义一个函数来规范化传递给它的任何向量,就像您在程序中所做的那样:
但是,由于x、y和z各有8个元素,因此不能使用x、y和z的分量对x进行归一化。
我想你要做的是对8个传感器中的每个传感器的向量(x,y,z)进行归一化。因此,你应该将8个向量(每个传感器一个)传递到我上面定义的归一化函数中。这可能看起来像这样: