2016-10-11 67 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(這是存在進權向量中的值,但它不是我想要的值)。

如果我做的:

Weight(1) 

它返回ans = 1.2550(這是我想要的值)。

這三個載體爲例如: 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

在'WeightedMatrix(節點j (1),NodeX(1))'如果你想看到與Weight(1)'相同的結果,你不應該改變參數的順序嗎? – erfan

+0

不幸的是結果是一樣的。謝謝 –

+0

我認爲你應該分享你的代碼中你讀/生成三個向量的部分。 – erfan

回答

0

可以形成鄰接矩陣爲稀疏矩陣,以防止內存問題:

WeightedMatrix_sp = sparse(NodeX, NodeY, Weight); 

如果你有足夠的內存,你可以稀疏矩陣轉化爲稠密矩陣:

WeightedMatrix = full(WeightedMatrix_sp); 
+0

謝謝,但它不是一個記憶問題,我設法只用結果一個和沒有權重,但我的問題包括匹配權重與索引。再次感謝你... –

+0

@RiccardoCelli如果你想要一個而不是權重,請添加你的條件的問題。你可以寫:'WeightedMatrix =滿(稀疏(NodeX,NodeY,1));' – rahnema1

+0

不,我想要權重。問題不在於數字,而在於矢量權重的元素。 :) –