Numpy点返回不同的值

问题描述 投票:0回答:1

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]]

预期的第一个值。

python numpy dot normalize
1个回答
2
投票

所以,你的问题是由以下事实引起的 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]]

© www.soinside.com 2019 - 2024. All rights reserved.