matlab - 将 spfun 与两个相同顺序的稀疏矩阵一起使用

标签 matlab matrix sparse-matrix

我有两个稀疏矩阵 A 和 B,它们具有相同的稀疏模式(所有非零点都在完全相同的位置):

i = randi(1000,[50,1]);
j = randi(1000,[50,1]);
a = rand(50,1);
b = rand(50,1);

A = sparse(i,j,a,1000,1000);
B = sparse(i,j,b,1000,1000);

我想只对非零元素有效地计算 exp(A-B),并将其保存回 A。 我尝试使用 spfun 完成该任务:

f = @(x,y) exp(x-y);
A = spfun(f,A,B);

但我在 spfun 中收到错误提示:“输入参数太多。” 谁能建议一种有效的计算方法? 应该计算很多次。

谢谢!

编辑:mikkola 建议 A = spfun(@f,A-B) 解决了问题,但问题仍然是如何使用无法使用同样的把戏。例如:

g = @(x,y) x.*cos(y);
A = spfun(@g,A,B);

最佳答案

你不能使用

A = spfun(@exp, A-B);

因为对于 AB 相等的条目,您将得到 0 而不是 1

要解决这个问题,您可以计算非零分量的指数向量,然后从中构建一个稀疏矩阵:

A = sparse(i,j,exp(nonzeros(A)-nonzeros(B))); %// if you have i, j stored

A(find(A)) = exp(nonzeros(A)-nonzeros(B));

关于matlab - 将 spfun 与两个相同顺序的稀疏矩阵一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557101/

相关文章:

arrays - 在 matlab 中从 3 列表创建网格

python - python中的神经网络非线性时间序列Narx模型

c - 用于演示矩阵的简单 C 图形库

C : How do you input integers row by row into a 2 dimensional matrix and then get it back from a function to main()?

python - 为什么 RGB 图像上的 python cv2.resize 函数给出的结果与 MATLAB imresize 函数不同?

arrays - 向量除法的部分和

matrix - 深度学习模型中不同数量节点的直觉

python - Scipy 稀疏矩阵 - 仅对非零元素进行逐元素乘法和除法

python - 设置 csr_matrix 的行

python - 如何将 SciPy 稀疏矩阵转换为字典