为了账号安全,请及时绑定邮箱和手机立即绑定

Numpy dot 返回不同的值

Numpy dot 返回不同的值

牛魔王的故事 2022-10-25 14:59:15
Numpy dot 在标准化后返回不同的值。我有两个函数应该返回相同的值。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)最小的可重现示例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]]预期的第一个值。
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号