Numpy点在归一化后返回不同的值。我有两个应该返回相同值的函数。
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]]
期望的第一个值。
所以您的问题是由于y
是3x1矩阵这一事实引起的。调用normalize
时,它正在第二个轴(normalize
)上进行归一化,在此它分别对每个值进行归一化。所以
axis=1
当您需要时
normalize(y) -> array([[1.], [1.], [1.]])
进行此更改,两个函数将返回相同的值normalize(y, axis=0) -> array([[0.26726124], [0.53452248], [0.80178373]])