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

asi*_*sim 6 wolfram-mathematica

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

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

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"
Run Code Online (Sandbox Code Playgroud)

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

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

Arn*_*ing 10

也许这个?

WriteVector[stream_, vector_] :=
  WriteString[stream, ##, "\n"] & @@ Riffle[vector, " "]
Run Code Online (Sandbox Code Playgroud)

和:

fname = "c:\\users\\arnoudb\\test.out";
Run Code Online (Sandbox Code Playgroud)

然后:

Do[WriteVector[fname, RandomReal[{0, 1}, 5]],{10}]
Run Code Online (Sandbox Code Playgroud)

并检查:

FilePrint[fname]
Run Code Online (Sandbox Code Playgroud)

完成后关闭流:

Close[fname]
Run Code Online (Sandbox Code Playgroud)