2016-10-11 4 views
1

Matlab을 사용하는 데 문제가 있습니다. 거대한 인접성 행렬을 만들고 싶습니다.이 결과를 얻으려면 3 벡터를 생성하는 코드를 작성했습니다 : NodeX, NodeYWeight.Matlab에서 벡터로 가중치 행렬을 구축하십시오.

NodeX은 행렬의 행 색인을 나타냅니다.

NodeY은 행렬의 열 인덱스를 나타냅니다.

Weight은 가중치를 포함하는 벡터입니다.

이 모든 벡터는 .csv 파일에 저장되어 Matlab은 매우 쉽게 읽을 수 있습니다. 그러나 매트릭스를 만들 때 문제가 있습니다. 이것은 색인을 가중치와 연관시키기 위해 사용하는 코드입니다.

for i=1:1:3873 
    WeightedMatrix(NodeY(i), NodeX(i)) = Weight(i); 
    end 

결과는 나에게 조금 이상합니다. 사실 내가 할 경우 : 그다지

WeightedMatrix(NodeY(1), NodeX(1)) 

matlab에 인쇄 : ans = 0.2483 (가중치 벡터에 존재하는 값이지만 내가 원하는 값 아니다된다).

그리고 내가 할 경우 : 그것은 (내가 원하는 값이다) ans = 1.2550을 반환

Weight(1) 

.

이 세 벡터는, 예를 들면 다음과 같습니다 는 Data Imported from .Csv

이 .csv 파일을 생성하는 마지막 부분입니다 :

tmp = set(Final) 
tmp = tuple(tmp) 
for z in tmp: 
print str(z[0]) + "," + str(z[1]) + "," + str(z[2]) + "\n" 

어떤 도움이 매우 이해할 수있을 것이다. 감사합니다.

당신은 메모리 문제를 방지하기 위해 희소 행렬로 인접 행렬을 형성 할 수
+0

(NodeY (1), NodeX (1))'Weight (1) '과 같은 결과를보고 싶다면 인수의 순서를 변경해서는 안됩니까? – erfan

+0

불행히도 결과는 동일합니다. 감사합니다. –

+0

3 개의 벡터를 읽거나 생성하는 코드 부분을 공유해야한다고 생각합니다. – erfan

답변

0

: 메모리가 충분한 경우

WeightedMatrix_sp = sparse(NodeX, NodeY, Weight); 

당신이 조밀 한 매트릭스에 희소 행렬을 변환 할 수 있습니다 WeightedMatrix`에서

WeightedMatrix = full(WeightedMatrix_sp); 
+0

고맙지 만 메모리의 문제는 아니지만 나는 결과를 오직 하나는 가중치가 없지만 내 문제는 가중치를 색인과 일치시키는 것으로 구성됩니다. 한번 더 고맙습니다 ... –

+0

@RiccardoCelli 가중치 대신 원하는 것을 원한다면 질문에 조건을 추가하십시오. 다음과 같이 쓸 수 있습니다 : WeightedMatrix = full (희소수 (NodeX, NodeY, 1)); ' – rahnema1

+0

아니요. 무게. 문제는 숫자가 아니라 벡터 가중치의 요소와 관련이 있습니다. :) –

관련 문제