【发布时间】:2018-05-06 02:16:08
【问题描述】:
我有一个稀疏矩阵
obj.resOp = sparse(row,col,val);
和一个包含矩阵中每一行之和的向量
sums = sparse(sum(obj.resOp,2));
现在我想做的是
obj.resOp = obj.resOp ./ sums;
这将缩放矩阵中的每一行,使每一行的行和为 1。
但是在最后一行中,MATLAB 内部似乎从 obj.resOp 构造了一个完整的矩阵,因此我得到了这个错误:
使用错误。/请求的 38849x231827 (17.5GB) 数组超过最大值 数组大小偏好。创建大于此限制的数组可能 花费很长时间并导致 MATLAB 无响应。请参阅数组大小限制或首选项 面板了解更多信息。
对于足够大的矩阵。
理论上,我认为没有必要扩展为完整的矩阵。在保持obj.resOp 的稀疏性的同时,是否有任何我想要实现的 MATLAB 公式?
【问题讨论】:
-
了解您使用的是哪个版本的 MATLAB 可能很重要?
-
我使用的是 MATLAB 2017a。
-
obj.resOp = inv(diag(sums)) * obj.resOp;应该给我同样的结果,但是被杀了。不过,这可能是我的向量中的一个错误。
-
sum中的一些条目为零,这就是上述方法不起作用的原因。修复此问题后,一切正常!不管怎样,谢谢你的建议,@Wolfie
标签: matlab matrix sparse-matrix