Mathematica にインポートすると、次のようなファイルがあります: {{1,1,n1},{1,2,n2},{1,3,n3},{2,1,n4},{ 2,2,n5},{2,3,n6}} ここで、n1...n6 は次のような行列としてインポートする数値です。
各ブロックの最初の数字は行を指定し、2 番目の数字は列を指定しますが、これらは行列の一部ではありません。各ブロックの 3 番目の数字のみがマトリックスの一部です。どうやってやるの?
Mathematica にインポートすると、次のようなファイルがあります: {{1,1,n1},{1,2,n2},{1,3,n3},{2,1,n4},{ 2,2,n5},{2,3,n6}} ここで、n1...n6 は次のような行列としてインポートする数値です。
各ブロックの最初の数字は行を指定し、2 番目の数字は列を指定しますが、これらは行列の一部ではありません。各ブロックの 3 番目の数字のみがマトリックスの一部です。どうやってやるの?
もしも
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
、位置と値のRule
ペアの形式でデータを受け入れる at を使用することです。
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
Normal @ array
{{n1, n2, n3}, {n4, n5, n6}}
また、 Mathematica専用の StackExchange サイトもありますので、ぜひご覧ください。