2013-01-04 68 views
1

我有一個文件,當我導入到Mathematica中時,如下所示: {{1,1,n1},{1,2,n2},{1, 3,n3},{2,1,n4},{2,2,n5},{2,3,n6}}其中n1 ... n6是我想要導入的一些數字,如下所示:以矩陣的形式將數據導入到Mathematica中

enter image description here

在每個塊中的第一個數字規定了行和第二列,但它們不是矩陣的一部分。每個塊中只有第三個數字是矩陣的一部分。我怎樣才能做到這一點?

回答

2

如果

data = {{1, 1, n1}, {1, 2, n2}, {1, 3, n3}, {2, 1, n4}, {2, 2, n5}, {2, 3, n6}}; 

,你可以簡單地做

mat = Partition[data[[All, 3]], 3, 3] 
+1

如果數據被保證填充矩陣,但沒有正確排序,只需應用Sort []應該會得到正確的順序。這可能比sparsearray方法更好(或者,如果您不知道先驗尺寸,也許不會。) – agentp

+0

非常感謝。完美的作品 –

1

有一對夫婦這個問題,我能想到的解釋。

如果你的數據是在常規格式,您希望爲我already directed you towardPartition功能對方的回答說明瞭在存儲效率的方式,我建議在ReadList密切關注及相關功能進行閱讀。

我將重點關注數據不是完全規則的形式,因爲給定的行和列索引對於描述數組中數據的位置是必需的。對於最自然的方法是使用SparseArray它在的位置和值的形式接收數據Rule對:

data = {{1, 1, n1}, {1, 2, n2}, {1, 3, n3}, {2, 1, n4}, {2, 2, n5}, {2, 3, n6}}; 

array = SparseArray[{#, #2} -> #3 & @@@ data]; 

array // MatrixForm 

Mathematica graphics

功能Normal可以被用於將SparseArray轉換爲常規列表-of-列表陣列根據需要:

Normal @ array 
{{n1, n2, n3}, {n4, n5, n6}} 

另外there is a StackExchange site致力於Mathematica,我鼓勵你去探索。

+0

非常感謝。也適用! –