numpy 在python中取3个向量的范数

rxztt3cl  于 2022-11-23  发布在  Python
关注(0)|答案(1)|浏览(163)

这可能是一个愚蠢的问题,但由于某种原因,我不能得到三个向量矩阵的范数。
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的结果。

798qvoo8

798qvoo81#

正规化并不会使分量之和等于1。正规化会使向量的范数等于1。您可以通过取正规化向量的范数(元素平方和的平方根)来检查代码是否正常工作。* 即 * 应该等于1。
据我所知,您的代码正在按预期工作。
我犯了一个错误-您的代码按预期工作,但不适合您的应用程序。您可以定义一个函数来规范化传递给它的任何向量,就像您在程序中所做的那样:

def normalize(vector):
    norm = np.sqrt(np.sum(np.square(vector)))
    return vector/norm

但是,由于x、y和z各有8个元素,因此不能使用x、y和z的分量对x进行归一化。
我想你要做的是对8个传感器中的每个传感器的向量(x,y,z)进行归一化。因此,你应该将8个向量(每个传感器一个)传递到我上面定义的归一化函数中。这可能看起来像这样:

normalized_vectors = []
for i in range(8):
    vector = np.asarray([x[i], y[i],z[i]])
    normalized_vectors.append = normalize(vector)

相关问题