How to write efficiently a large matrix of real numbers to an ASCII file
- To: mathgroup at smc.vnet.net
- Subject: [mg7266] How to write efficiently a large matrix of real numbers to an ASCII file
- From: Martin Heimann <martin.heimann at dkrz.de>
- Date: Tue, 20 May 1997 02:59:18 -0400 (EDT)
- Organization: mpi für meteorologie
- Sender: owner-wri-mathgroup at wolfram.com
Dear fellow Mathematica users, This seems to be a very basic question and must have been asked many times before, maybe it is in a FAQ, but I could not find it. How to write efficiently a matrix of real numbers to an ASCII file such that it can be read by a normal program (e.g. in Fortran or C)? WRI suggests to use WriteMatrix: WriteMatrix[filename_String,data_List,separator_String:"\t"] := With[{myfile = OpenWrite[filename]}, Scan[(WriteString[myfile,First[#]]; Scan[WriteString[myfile,separator,#]&,Rest[#]]; WriteString[myfile,"\n"])&,data]; Close[myfile]] which, however, does not write exponents in the standard "e" format. Furthermore, WriteMatrix is very slow (try it on a matrix of 1000 x 10 real numbers!). The exponents are written correctly if one uses FortranForm to write the individual numbers: WriteFMatrix[filename_String,data_List,separator_String:"\t"] := With[{myfile = OpenWrite[filename]}, Scan[(WriteString[myfile,FortranForm[First[#]]]; Scan[WriteString[myfile,separator, FortranForm[#]]&,Rest[#]]; WriteString[myfile,"\n"])&,data]; Close[myfile]] This is still very slow, however. Has anybody a faster suggestion? Maybe by using Compile[]? I'd appreciate very much your suggestions. Martin Heimann (martin.heimann at dkrz.de)