Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy点返回不同的值_Python_Numpy_Normalize - Fatal编程技术网

Python Numpy点返回不同的值

Python Numpy点返回不同的值,python,numpy,normalize,Python,Numpy,Normalize,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 /

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矩阵。调用时,它将在第二个轴(
axis=1
)上进行规格化,其中它将分别对每个值进行规格化。所以

normalize(y) -> array([[1.], [1.], [1.]])
当你想要的时候

normalize(y, axis=0) -> array([[0.26726124], [0.53452248], [0.80178373]])
进行此更改后,两个函数将返回相同的值
[[0.62190562]

[1.47271032]

您是否忘记将轴=0传递给规范化(y)?它在第一个函数中没有任何意义,我也不会将轴=0传递给y,函数工作,但在将其添加到第二个函数后,它会给出预期值。从numpy文档中获取,如果轴没有,则为向量范数(当x为1-D时)或者返回一个矩阵范数(当x为2-D时)。
normalize
默认在
axis=1
上运行