gpt4 book ai didi

python - scipy.sparse 默认值

转载 作者:太空狗 更新时间:2023-10-29 20:23:21 25 4
gpt4 key购买 nike

稀疏矩阵格式 (dok) 假定不在字典中的键的值等于零。有没有办法让它使用零以外的默认值?

此外,有没有一种方法可以计算稀疏矩阵的对数(类似于常规 numpy 矩阵中的 np.log)

最佳答案

该功能不是内置的,但如果您真的需要它,您应该能够编写自己的 dok_matrix 类,或者是 Scipy 的子类。 Scipy 实现是 here .至少在调用 dict.* 的地方,需要更改默认值 --- 并且可能需要进行一些其他更改。

但是,我会尝试重新表述问题,这样就不需要了。例如,如果你做线性代数,你可以分离常数项,然后做

from scipy.sparse.linalg import LinearOperator
A = whatever_dok_matrix_minus_constant_term
def my_matvec(x):
return A*x + constant_term * x.sum()
op = LinearOperator(A.shape, matvec=my_matvec)

对于大多数线性代数例程(例如迭代求解器),您可以传入 op 而不是 A

关于矩阵对数:稀疏矩阵(如 scipy.linalg.logm)的对数通常是稠密的,因此您应该先将矩阵转换为稠密矩阵,然后再计算像往常一样的对数。据我所知,使用稀疏矩阵不会带来任何性能提升。如果您只需要计算向量与对数的乘积,log(A) * v 向量,一些 Krylov 方法可能会有所帮助。

如果你 OTOH 想要按元素计算对数,你可以直接修改 .data 属性(至少在 COO、CSR 和 CSC 中可用)

x = A.tocoo()
x.data = np.log(x.data)
A = x.todok()

这只留下零元素,但如上所述,这允许单独处理常量部分。

关于python - scipy.sparse 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256206/

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