我有一个稀疏矩阵文件,其中包含820行。该文件的几行示例如下:
0 547 1
1 547 1
2 539 0.500000
2 540 0.500000
3 512 0.333333
3 515 0.333333
我想将这个稀疏矩阵文件导入Matlab。文件中包含的完整矩阵有1184行和相同数量的列。要将此文件转换为稀疏矩阵,我使用以下命令:
T = reshape(T,3,entries)';
disp('Array is: ');
A = (sparse(T(:,1)+1, T(:,2)+1, T(:,3), rows , cols));
首先,在向index添加+1之前,会显示一个错误,即:
" ???使用==>时出错稀疏索引到矩阵必须是正的。
这是由于Matlab从索引1开始,而不是从索引0开始。
添加+1后,问题得以解决。 但现在,我运行此代码
A = (sparse(T(:,1)+1, T(:,2)+1, T(:,3), rows , cols));
对于对角矩阵,输出非常好,并且解决了正索引的问题。但是当我尝试使用非对角矩阵时,结果是它反转输出。我的意思是它不是让(1,500)= 3,67而是给我(500,1)= 3,67。为什么Matlab会这样做?
答案 0 :(得分:3)
您可能正在关注行主要(例如,您的矩阵是在C中创建的),而MATLAB是列专业。要从一个转换为另一个,只需交换坐标!
A = (sparse(T(:,2)+1, T(:,1)+1, T(:,3), cols, rows));
它起作用的例子:
T=[0 547 1;
1 547 1;
2 539 0.500000;
2 540 0.500000;
3 512 0.333333;
3 515 0.333333];
% choosen randombly 4x600 because I dont have the full matrix.
% Just use rows and cols in your case
A = sparse(T(:,1)+1, T(:,2)+1, T(:,3), 4 , 600); % this one is as in C
B = sparse(T(:,2)+1, T(:,1)+1, T(:,3), 600 , 4); % this one is my suggestion
isequal(A',B) %the transpose of A is equal to B