开发者

How to save double to file in python?

Let's say I need to save a matrix(each line corresponds one row) that could be loaded from fortran later. What method should I prefer? Is converting everything to string is the only 开发者_Python百科one approach?


You can save them in binary format as well. Please see the documentation on the struct standard module, it has a pack function for converting Python object into binary data.

For example:

import struct

value = 3.141592654
data = struct.pack('d', value)
open('file.ext', 'wb').write(data)

You can convert each element of your matrix and write to a file. Fortran should be able to load that binary data. You can speed up the process by converting a row as a whole, like this:

row_data = struct.pack('d' * len(matrix_row), *matrix_row)

Please note, that 'd' * len(matrix_row) is a constant for your matrix size, so you need to calculate that format string only once.


I don't know fortran, so it's hard to tell what is easy for you to perform on that side for parsing.

It sounds like your options are either saving the doubles in plaintext (meaning, 'converting' them to string), or in binary (using struct and the likes). The decision for which one is better depends.

I would go with the plaintext solution, as it means the files will be easily readable, and you won't have to mess with different kinds of details (endianity, default double sizes).
But, there are cases where binary is better (for example, if you have a really big list of doubles and space is of importance, or if it is easier for you to parse it and you need the optimization) - but this is likely not your case.


You can use JSON

import json
matrix = [[2.3452452435, 3.34134], [4.5, 7.9]]
data = json.dumps(matrix)
open('file.ext', 'wb').write(data)

File content will look like:

[[2.3452452435, 3.3413400000000002], [4.5, 7.9000000000000004]]


If legibility and ease of access is important (and file size is reasonable), Fortran can easily parse a simple array of numbers, at least if it knows the size of the matrix beforehand (with something like READ(FILE_ID, '2(F)'), I think):

1.234  5.6789e4
3.1415 9.265358978
42     ...

Two nested for loops in your Python code can easily write your matrix in this form.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜