gpt4 book ai didi

python - Python 中稀疏矩阵的矩阵乘法

转载 作者:太空狗 更新时间:2023-10-30 01:55:40 30 4
gpt4 key购买 nike

我想将稀疏矩阵 A 与元素为 0、-1 或 1 的矩阵 B 相乘。为了降低矩阵乘法的复杂性,我可以忽略为 0 的项目,或者如果项目为 1 或 subs,则继续添加不乘法的列。如果它是-1。关于这个的讨论在这里:

Random projection algorithm pseudo code

现在我可以继续实现这个技巧了,但我想知道我是否使用 Numpy 的乘法函数会更快。

有谁知道他们是否为此类矩阵优化了矩阵乘法?或者你能建议一些东西来加快这个过程,因为我有一个矩阵 300000x1000。

最佳答案

你看过 scipy.sparse 了吗?在这里重新发明轮子是没有意义的。稀疏矩阵是一个相当标准的东西。

(在示例中,我使用了 300000x4 矩阵以便在乘法后更容易打印。不过,300000x1000 矩阵应该没有任何问题。这将比两个密集数组相乘要快得多,假设你有大多数 0 元素。)

import scipy.sparse
import numpy as np

# Make the result reproducible...
np.random.seed(1977)

def generate_random_sparse_array(nrows, ncols, numdense):
"""Generate a random sparse array with -1 or 1 in the non-zero portions"""
i = np.random.randint(0, nrows-1, numdense)
j = np.random.randint(0, ncols-1, numdense)
data = np.random.random(numdense)
data[data <= 0.5] = -1
data[data > 0.5] = 1
ij = np.vstack((i,j))
return scipy.sparse.coo_matrix((data, ij), shape=(nrows, ncols))

A = generate_random_sparse_array(4, 300000, 1000)
B = generate_random_sparse_array(300000, 5, 1000)

C = A * B

print C.todense()

这会产生:

[[ 0.  1.  0.  0.  0.]
[ 0. 2. -1. 0. 0.]
[ 1. -1. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]

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

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