我有一个文件,当我导入Mathematica时,看起来像这样: {{1,1,n1},{1,2,n2},{1,3,n3},{2,1,n4},{2,2,n5},{2,3,n6}}其中n1 ... n6是我想要导入的一些数字,如下所示:
每个块中的第一个数字指定行,第二个数字指定列,但它们不是矩阵的一部分。每个块中只有第三个数字是矩阵的一部分。我怎么能这样做?
答案 0 :(得分: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 :(得分:1)
我可以想到对这个问题有几种解释。
如果您的数据是常规格式,并且您希望以内存效率的方式阅读它,我建议您仔细查看ReadList
及相关功能already directed you toward和Partition
函数另一个答案说明了这一点。
我将重点关注数据不是完全规则形式的想法,因为给定的行和列索引是描述数组中数据位置所必需的。为此,最自然的方法是使用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
函数Normal
可用于根据需要将SparseArray
转换为常规list-of-lists数组:
Normal @ array
{{n1, n2, n3}, {n4, n5, n6}}
另外there is a StackExchange site致力于 Mathematica ,我鼓励您去探索。