Numpy dot 在標(biāo)準(zhǔn)化后返回不同的值。我有兩個函數(shù)應(yīng)該返回相同的值。import numpy as npfrom sklearn.preprocessing import normalizedef 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)最小的可重現(xiàn)示例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ù)期的第一個值。
1 回答

慕桂英546537
TA貢獻(xiàn)1848條經(jīng)驗 獲得超10個贊
y
因此,您的問題是由3x1 矩陣這一事實引起的。當(dāng)您調(diào)用normalize
時,它會在第二個軸 ( axis=1
) 上進(jìn)行歸一化,它會分別對每個值進(jìn)行歸一化。所以
normalize(y) -> array([[1.], [1.], [1.]])
當(dāng)你想要的時候
normalize(y, axis=0) -> array([[0.26726124], [0.53452248], [0.80178373]])
進(jìn)行此更改,您的兩個函數(shù)都將返回相同的值[[0.62190562]
[1.47271032]]
添加回答
舉報
0/150
提交
取消