gpt4 book ai didi

python - 稀疏 python 向量的范数

转载 作者:行者123 更新时间:2023-12-01 05:56:01 31 4
gpt4 key购买 nike

Python中能否有效获取稀疏向量的范数?

我尝试了以下方法:

from scipy import sparse
from numpy.linalg import norm

vector1 = sparse.csr_matrix([ 0 for i in xrange(4000000) ], dtype = float64)

#just to test I set a few points to a value higher than 0

vector1[ (0, 10) ] = 5
vector1[ (0, 1500) ] = 80
vector1[ (0, 2000000) ] = 6

n = norm(t1)

但随后我收到错误:

ValueError: dimension mismatch

范数函数仅适用于数组,因此可能这就是 csr_matrix 不起作用的原因,但后来我没有找到另一种有效计算范数的方法。一种可能的解决方案是计算:

norm(asarray(vector1.todense()))

但是它首先就破坏了使用稀疏向量的目的。作为最后一种方法,我可以迭代向量的每个元素并手动计算范数,但由于效率非常重要,所以我正在寻找更快、更容易实现的方法。

预先感谢您的帮助!

编辑:我尝试了建议的所有内容,最好的解决方案是:

(vector1.data ** 2).sum()

来自杜格尔。但 Cython 解决方案也非常好,并且随着向量中不为零的元素数量的增长,效果会更好。谢谢大家的帮助!

最佳答案

  1. 我希望您没有真正初始化和设置这样的元素,发出这些警告是有原因的,并且 4M 的临时列表证明您还剩下足够的资源;)。
  2. 手动计算范数非常简单,只需直接使用基础数据vector1.data即可。您还可以使用诸如 vector1.multiply(vector1) 加上 .sumvector1.dot(vector1.T) 但正如 Dougal 指出的那样,对于这个简单的情况可能会慢得多。
  3. 我想您想做更多,但如果您只想要向量范数,那么遍历稀疏矩阵似乎是很多不必要的工作。

关于python - 稀疏 python 向量的范数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12569695/

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