我有一个文件,当我导入 Mathematica 时,它看起来像这样:{{1,1,n1},{1,2,n2},{1,3,n3},{2,1,n4},{ 2,2,n5},{2,3,n6}} 其中 n1...n6 是一些我想作为矩阵导入的数字,如下所示:
每个块中的第一个数字指定行,第二个指定列,但它们不是矩阵的一部分。只有每个块中的第三个数字是矩阵的一部分。我怎样才能做到这一点?
我有一个文件,当我导入 Mathematica 时,它看起来像这样:{{1,1,n1},{1,2,n2},{1,3,n3},{2,1,n4},{ 2,2,n5},{2,3,n6}} 其中 n1...n6 是一些我想作为矩阵导入的数字,如下所示:
每个块中的第一个数字指定行,第二个指定列,但它们不是矩阵的一部分。只有每个块中的第三个数字是矩阵的一部分。我怎样才能做到这一点?
如果
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]
我能想到对这个问题的几种解释。
如果您的数据是常规格式,并且您希望以内存有效的方式阅读它,我建议仔细查看ReadList
我已经指导您的相关功能以及Partition
其他答案说明的功能。
相反,我将关注数据不是完全规则形式的想法,因为给定的行和列索引对于描述数据在数组中的位置是必要的。为此,最自然的方法是使用SparseArray
at 它以位置和值对的形式接受数据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}}
还有一个 StackExchange 站点专门用于Mathematica,我鼓励您去探索。