from numpy.random import rand
from sklearn.preprocessing import normalize
from scipy.sparse import csr_matrix
from scipy.linalg import norm
w = (rand(1,10)<0.25)*rand(1,10)
x = (rand(1,10)<0.25)*rand(1,10)
w_csr = csr_matrix(w)
x_csr = csr_matrix(x)
(normalize(w_csr,axis=1,copy=False,norm='l2')*normalize(x_csr,axis=1,copy=False,norm='l2')).todense()
norm(w,ord='fro')*norm(x,ord='fro')
我正在使用 scipy csr_matrix 并希望使用 frobenius 范数对两个矩阵进行归一化并获得他们的产品。但是来自 scipy.linalg 的 norm 和来自 sklearn.preprocessing 的 normalize 似乎对矩阵的评估方式不同。由于从技术上讲,在上述两种情况下,我正在计算相同的 frobenius 范数,这两个表达式的计算结果不应该是相同的吗?但我得到以下答案:
矩阵([[ 0.962341]])
0.4431811178371029
分别用于 sklearn.preprocessing 和 scipy.linalg.norm。我真的很想知道我做错了什么。