Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么稀疏非对角数组的索引是反向的?_Matlab_Sparse Matrix - Fatal编程技术网

Matlab 为什么稀疏非对角数组的索引是反向的?

Matlab 为什么稀疏非对角数组的索引是反向的?,matlab,sparse-matrix,Matlab,Sparse Matrix,我有一个稀疏矩阵文件,包含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 = (

我有一个稀疏矩阵文件,包含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));
首先,在将+1添加到索引之前,将显示一个错误,即:

“???使用==>稀疏索引到矩阵时出错必须为正

这是因为Matlab从索引1开始,而不是从索引0开始

添加+1后,问题得到解决。 但是现在,我运行这个代码

  A = (sparse(T(:,1)+1, T(:,2)+1, T(:,3), rows , cols));

对于对角矩阵,输出非常好,正指数的问题也得到了解决。但是当我尝试对非对角矩阵使用它时,结果是它的输出是相反的。我的意思是,不是(1500)=3,67,而是(500,1)=3,67。为什么Matlab会这样做呢?

您可能是在关注第二行(例如,你的矩阵是用C语言创建的)而MATLAB是column major。要从一个转换到另一个,只需交换坐标

A=(稀疏(T(:,2)+1,T(:,1)+1,T(:,3),列,行));


它工作的示例:

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

是的,这似乎是一个问题,因为在那之后我想计算逆数组,而解决方案不是理想的。你认为我的代码有错误吗?@Obito,如果你花时间更正官方程序名,至少要正确使用。@adrian Cool,谢谢。根据你的指示,问题仍然很不幸。@EviPanayiotara你是什么意思?如果你是
A(1500)
你用我的代码还是你的代码得到了同样的结果?这是不可能的。用你建议我的方向:@erfan?不。我不明白。行/列主与+1无关。+1只是从零索引变为1索引。@erfan看起来有道理,但如果你再进一步想一想,它真的没有意义。我是编写MATLAB代码,从C导入。如果我在那里添加一个-1,它将无法工作,其余的代码都是MATLAB代码。我没有编写一个完整的C函数来获取MATLAB索引并将它们传递给C,这甚至不在OPs问题中。