gpt4 book ai didi

python - Python 的稀疏矩阵乘法问题

转载 作者:行者123 更新时间:2023-12-01 02:39:57 27 4
gpt4 key购买 nike

我正在尝试获取稀疏矩阵及其转置的点积。我正在使用 scipy.sparse 库并发现结果不正确。见下文:

import numpy as np
import scipy.sparse

#Define the dense matrix
matrix_dense = np.zeros([100000,10])
for i in range(10):
i_0 = i*10000
i_1 = (i+1)*10000
matrix_dense[i_0:i_1,i] = 1

#Define the sparse matrix
cols = []
for i in range(10):
cols+=[i]*10000

dtype = np.uint8
rows = range(len(cols))
data_csc = np.ones(len(cols), dtype=dtype)
matrix_sparse = scipy.sparse.csc_matrix((data_csc, (rows, cols)), shape=(len(cols), 10), dtype=dtype)

#Check that the two matrices are identical
assert np.abs(matrix_sparse.todense() - matrix_dense).max() == 0

#Dot product of the dense matrix
dense_product = np.dot(matrix_dense.T,matrix_dense)

#Dot product of the sparse matrix
sparse_product = (matrix_sparse.T)*(matrix_sparse)

正确答案(由dense_product给出)应该是对角矩阵,其中对角项等于10,000。

print dense_product
[[ 10000. 0. 0. 0. 0. 0. 0. 0. 0.
0.]
[ 0. 10000. 0. 0. 0. 0. 0. 0. 0.
0.]
[ 0. 0. 10000. 0. 0. 0. 0. 0. 0.
0.]
[ 0. 0. 0. 10000. 0. 0. 0. 0. 0.
0.]
[ 0. 0. 0. 0. 10000. 0. 0. 0. 0.
0.]
[ 0. 0. 0. 0. 0. 10000. 0. 0. 0.
0.]
[ 0. 0. 0. 0. 0. 0. 10000. 0. 0.
0.]
[ 0. 0. 0. 0. 0. 0. 0. 10000. 0.
0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 10000.
0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0.
10000.]]

但是,无论我如何计算稀疏矩阵,结果都是错误的:

print sparse_product.todense()
[[16 0 0 0 0 0 0 0 0 0]
[ 0 16 0 0 0 0 0 0 0 0]
[ 0 0 16 0 0 0 0 0 0 0]
[ 0 0 0 16 0 0 0 0 0 0]
[ 0 0 0 0 16 0 0 0 0 0]
[ 0 0 0 0 0 16 0 0 0 0]
[ 0 0 0 0 0 0 16 0 0 0]
[ 0 0 0 0 0 0 0 16 0 0]
[ 0 0 0 0 0 0 0 0 16 0]
[ 0 0 0 0 0 0 0 0 0 16]]

我尝试了不同的方法来执行稀疏点积并得到完全相同的答案:

sparse_product_1 = np.dot(matrix_sparse.T,matrix_sparse)
sparse_product_2 = (matrix_sparse.T).dot(matrix_sparse)
sparse_product_3 = scipy.sparse.csr_matrix.dot((matrix_sparse.T),
matrix_sparse)

知道发生了什么吗?

最佳答案

看起来您正在使用 uint8 数据类型,其最大值为 256,并且可能发生溢出,最终得到 10000%256这给你 16。

以下是正在发生的情况的示例:

x = np.array(10000, dtype = np.uint8)
x
array(16, dtype=uint8)

将您的 dtype 更改为 np.int64 对我有用:

dtype = np.int64

关于python - Python 的稀疏矩阵乘法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com