我在由代码产生的数据文件的稀疏矩阵(其不是MATLAB
)。数据文件由四列组成。前两列是矩阵项的实部和虚部,第三列和第四列分别是对应的行和列索引。MATLAB - 稀疏到稠密矩阵
我用下面的脚本转换到这个致密的基质中Matlab
。
tic
dataA = load('sparse_LHS.dat');
toc
% Initialise matrix
tic
Nr = 15; Nz = 15; Neq = 5;
A (Nr*Nz*Neq,Nr*Nz*Neq) = 0;
toc
tic
lA = length(dataA)
rowA = dataA(:,3); colA = dataA(:,4);
toc
tic
for i = 1:lA
A(rowA(i), colA(i)) = complex(dataA(i,1), dataA(i,2));
end
toc
这素文字然而,速度很慢(在for
循环的罪魁祸首)。
经过时间0.599023秒。
已用时间为0.001978秒。
经过时间0.000406秒。
经过时间275.462138秒。
在matlab
有没有快速的方式做到这一点?
这里是我试过到目前为止:
parfor
- 这让我
有效的索引,在PARFOR限制循环
我累了重铸for
环路类似这样的:
A(rowA(:),colA(:)) = complex(dataA(:,1), dataA(:,2));
,并且出现错误
下标的分配维度不匹配。
能否请你解释一下'IND =(可乐-1)*尺寸(A,1) + rowA;'是吗?我无法理解这一点。 – Rhinocerotidae
我明白了。 https://in.mathworks.com/help/matlab/math/matrix-indexing.html?refresh=true#f1-85511。非常感谢 。你为我节省了很多时间! – Rhinocerotidae