Matlab 如何在不丢弃索引的情况下将稀疏矩阵的值设置为0

Matlab 如何在不丢弃索引的情况下将稀疏矩阵的值设置为0,matlab,sparse-matrix,Matlab,Sparse Matrix,对于稀疏矩阵$X$,我有以下场景: for k = 1 : long_loop X(indexA{k}) = stuff; end X(indexB) = 0; 其中indexA{k}和indexB中的一些索引重叠。情况是,如果我将indexB设置为0,那么MATLAB会从X的定义中抛出indexB中的索引,然后当这些索引再次出现在循环中时,它们会被重新分配,这会使循环运行得非常慢。我想做的是将indexB索引的值X设置为0,而不丢弃索引。我目前使用 X(indexB) = eps;

对于稀疏矩阵$X$,我有以下场景:

for k = 1 : long_loop
    X(indexA{k}) = stuff;
end
X(indexB) = 0;
其中indexA{k}和indexB中的一些索引重叠。情况是,如果我将indexB设置为0,那么MATLAB会从X的定义中抛出indexB中的索引,然后当这些索引再次出现在循环中时,它们会被重新分配,这会使循环运行得非常慢。我想做的是将indexB索引的值X设置为0,而不丢弃索引。我目前使用

X(indexB) = eps;
但我不认为这是一个很好的解决方案,因为eps以后会成为错误的来源

有没有办法在不放弃索引的情况下将稀疏矩阵的值设置为0


谢谢

初始化稀疏矩阵时是否设置了
nzmax
?向稀疏矩阵增量添加元素总是比使用完整矩阵慢一点,更不用说偶尔设置为零了。如果Daniel的方法还不够,您应该应用不同的策略,在计算后构建稀疏矩阵,或者使用临时稀疏矩阵作为稀疏索引到减少的完整索引的映射。使用完整矩阵将不是一个选项,因为我需要X非常大(100000 X 100000)。我最初尝试设置nzmax,但由于某些原因,它不起作用。我想知道调用稀疏索引是否以某种方式否定了nzmax。。。在计算之后构建稀疏矩阵的问题是,我需要在循环中使用更新的矩阵值。这是算法的一个弱点。正如我所说:您可以始终使用
Xreduced(I(I,j))
,其中
I
是一个稀疏矩阵,它将
I,j
值转换为
Xreduced
中的线性索引,您可以提前构建。到目前为止,你的问题是相当广泛的,因为你没有给出任何关于你的问题的细节,除了:使用稀疏太慢了。哦,我明白了,所以基本上是建立我自己的稀疏矩阵格式。那肯定行!谢谢(我之前的意思是,在每次迭代中重新创建稀疏矩阵非常慢,只有1秒,而其他所有操作都需要0.01秒,但您的想法要好得多!)