python - 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]]
预期的第一个值。
解决方案
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]]
推荐阅读
- python - 计算列引用另一个表中的行
- python-3.x - 使用 vs 无循环扩展元组
- python - 用于在 Python 中绘制多个点之间的断开线的数据结构
- r - 从数据集在 R 中构建有向网络图
- javascript - 如何防止在 webpack 编译中合并 scss 文件?
- c# - .NET Framework 4.7.2 不支持 EFCore dll 中的 System.Data.SqlClient
- c# - 使用 Puppeteer 生成 PDF 并在 .Net 中显示/保存
- python - Python JIRA 非强制性字段在创建问题时被强制
- java - 系统找不到指定的文件但文件存在
- powershell - 修改 Invoke-Command 的输出