2016-10-17 2 views
1

저는 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에서 시작한다. 01 23,516,하지만 지금, iwhenI는 대각 행렬은이 코드

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

를 실행, 출력이 우수하고, 긍정적 인 인덱스의 문제는 해결됩니다. 그러나 비대 각형 행렬을 사용하려고하면 출력이 반전됩니다. 내 말은 (1,500) = 3,67이 아니라 (500,1) = 3,67이된다는 뜻입니다. 왜 Matlab이 그렇게합니까?

+0

예, 그 후 내가 반전 된 배열을 계산하기 원하는 문제가 될 것으로 보인다과 솔루션은 바람직하지 않다 . 내 코드에 오류가 있다고 생각합니까? –

+0

@Obito, 공식 프로그램 이름을 수정하는 데 시간을 보내는 경우 적어도 [MATLAB] (https://en.wikipedia.org/wiki/MATLAB)을 올바르게 사용하십시오. – Adriaan

+0

@Adriaan 쿨, 고마워. – Obito

답변

3

아마도 행 메이저 (예 : 행렬이 C로 작성)이고 MATLAB이 열 메이저 (column-major)입니다. 하나에서 다른 것으로 변환하려면 좌표를 바꾸면됩니다!

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 
+0

귀하의 지시에 따르면, 문제는 여전히 불행히도 남아 있습니다. –

+0

@EviPanayiotara 당신은 무엇을 의미합니까? 만약 당신이'A (1,500)'을한다면 당신은 나의 코드를 사용하거나 똑같은 것을 사용합니까? 그것은 불가능합니다. –

+0

coorection을 사용하여 저에게 제안했습니다 : –