猿问

Numpy dot 返回不同的值

Numpy dot 在标准化后返回不同的值。我有两个函数应该返回相同的值。


import numpy as np

from sklearn.preprocessing import normalize


def foo1(x, y):

    with np.errstate(invalid='ignore'):

        x_norm = np.nan_to_num(x / (np.linalg.norm(x, axis=0)))

    z = np.dot(x_norm, y / np.linalg.norm(y))

    print(z)


def foo2(x, y):

    x_norm = normalize(x, axis=0)

    z = np.dot(x_norm, normalize(y))

    print(z)


最小的可重现示例


x = np.array([[1, 2, 3],

              [4, 5, 6]])

y = np.array([[1], [2], [3]])

foo1(x, y)

foo2(x, y)

输出


[[0.62190562]

 [1.47271032]]

[[1.0611399 ]

 [2.79304638]]

预期的第一个值。


牛魔王的故事
浏览 122回答 1
1回答

慕桂英546537

y因此,您的问题是由3x1 矩阵这一事实引起的。当您调用normalize时,它会在第二个轴 ( axis=1) 上进行归一化,它会分别对每个值进行归一化。所以normalize(y) -> array([[1.], [1.], [1.]])当你想要的时候normalize(y, axis=0) -> array([[0.26726124], [0.53452248], [0.80178373]])进行此更改,您的两个函数都将返回相同的值[[0.62190562] [1.47271032]]
随时随地看视频慕课网APP

相关分类

Python
我要回答