在不使用Export的情况下将向量写入文件

时间:2011-12-01 23:05:25

标签: wolfram-mathematica

我感兴趣的是将多个向量写入文件,使得每个向量在文件中形成一行,并在生成后立即写入文件。向量的元素需要用单个空格分隔,我不想在向量中包含{ }个括号。基本上,我想模仿C的fprintf("file", "%f %f %f\n")功能。

这就是我所拥有的。有没有更好的方法呢?

st1 = OpenWrite["C:\\junk\\mu.out", FormatType -> OutputForm];

vt = Table[
   v = RandomReal[{0, 1}, 5];

   For[j = 1, j <= Length[v], j++, 
    WriteString[
     st1, 
     SequenceForm[NumberForm[v[[j]], ExponentFunction -> (Null &)], 
      " "]
     ]
    ];
   Write[st1, ""];
   v,
   {200}
   ];

In[3]:= Close[st1]

Out[3]= "C:\\junk\\mu.out"

基于精彩的Riffle功能,礼貌Arnoud和Mr. Wizard,我在下面修改了它:

WriteVector[stream_, vector_] :=
 Apply[WriteString[stream, ##, "\n"] &, 
  Riffle[Map[NumberForm[#, ExponentFunction -> (Null &)] &, vector], 
   " "]
  ]

1 个答案:

答案 0 :(得分:10)

也许这个?

WriteVector[stream_, vector_] :=
  WriteString[stream, ##, "\n"] & @@ Riffle[vector, " "]

fname = "c:\\users\\arnoudb\\test.out";

然后:

Do[WriteVector[fname, RandomReal[{0, 1}, 5]],{10}]

并检查:

FilePrint[fname]

完成后关闭流:

Close[fname]