5

Mathematica で次のリストを検討してください。

a = {
   {
    {0, 0, 0}, {1, 0, 0}, {1, 1, 0}
    },
   {
    {0, 0, 1}, {1, 0, 1}, {1, 1, 1}
    }
   };

次に、呼び出します。

Export["test.dat", a]

その後

b = Import["test.dat"]

a最後にが等しくないことがわかりますb。これを機能またはバグと見なす必要がありますか?

さらに、次の形式のリストをインポートしたいと思います: {P1,P2,P3...,Pn}wherePi={v1,v2,v3,...,vm}および each vi={x,y,z}wherex,y,zは、頂点の座標を表す数値viです。これは、ポリゴンのリストである必要があります。

.datMathematica で読めるようにファイルを設定するにはどうすればよいですか? 上記の出力を模倣しようとしましたExport["test.dat",a]が、他の問題を発見しました。私はこの質問を見つけましたが、答えをうまく機能させることができませんでした...

何か案は?前もって感謝します!

4

4 に答える 4

5

インポート/エクスポートに必要な正確な形式を指定する必要があります。指定しないと、Mathematica が正しい形式を推測できない可能性があります。

あなたの質問は、3D 配列の保存に適したテキスト形式はどれですか?

Mathematica を使用している場合、おそらく最も簡単な方法は、Mathematica の式構文を使用して式をエクスポートすることですExport["data.m", a, "Package"]。この形式は、他の言語から比較的簡単に記述できます (ただし、解析はそれほど簡単ではありません)。もう 1 つのオプションは、3D データ用に解析しやすい新しいテキスト形式を作成し、そのための独自の入出力関数を Mathematica と使用する必要がある他の言語の両方で作成することです。

作業しているデータの形式は固定されているため (常に座標トリプレットが存在します)、最も簡単な解決策は、次のように、エクスポートする前にリストをフラット化し、インポート後に分割することです。

Export["test.txt", Join @@@ a, "Table"]
b = Import["text.txt", "Table"]
Partition[#, 3]& /@ a
于 2011-06-03T09:14:16.013 に答える
2

MMA式を保存するにはDumpSave、(バイナリ、システム依存)、SaveまたはPutをお勧めしますが、エクスポートを使用する場合は、を文字列に変換し、それをテキストとしてエクスポートします。(私は以下を使用ImportStringしてExpertStringいるので、ファイルは必要ありませんが、とについては同じように機能しますImportExport。IMOこれは岩のようにしっかりしています。

a = {{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}}, {{0, 0, 1}, {1, 0, 1}, {1, 1, 1}}};
b = ToExpression@ImportString[ExportString[a // ToString, "Text"], "Text"]

(*  ==>
{{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}}, {{0, 0, 1}, {1, 0, 1}, {1, 1, 1}}}
*)

a == b

(* ==> True *)

ポリゴンリストの読み取りも同じように機能するはずです。

b = ToExpression@ImportString["test.dat", "Text"]
于 2011-06-03T19:05:47.353 に答える
1

私もこの問題に行きます。私の解決策は次のとおりです。

IN[]: a = {{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}}, {{0, 0, 1}, {1, 0, 1}, {1, 1, 1}}};
      Export["test.dat", a, "List"];
      b = ToExpression@Import["test.dat", "List"];
      a == b

Out[]: True

お役に立てれば。よろしくお願いします。

于 2012-06-28T00:22:20.920 に答える
1

たとえば、次のようにすることもできます。

a={{{0,0,0},{1,0,0},{1,1,0}},{{0,0,1},{1,0,1},{1,1,1}}};

Export["c:\\test.dat",a,"MathML"];
b=ToExpression@Import["c:\\test.dat","MathML"]

(*
->{{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}}, {{0, 0, 1}, {1, 0, 1}, {1, 1, 1}}}
*)

Import追加の利点は、この方法では出力を解析する必要がないことです。

于 2011-06-03T14:11:02.280 に答える