簡體   English   中英

如何在python中保存double文件?

[英]How to save double to file in python?

假設我需要保存一個矩陣(每行對應一行),以后可以從fortran加載。 我應該選擇哪種方法? 將所有內容轉換為字符串是唯一的方法嗎?

您也可以將它們保存為二進制格式。 請參閱struct standard模塊的文檔,它有一個用於將Python對象轉換為二進制數據的pack函數。

例如:

import struct

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

您可以轉換矩陣的每個元素並寫入文件。 Fortran應該能夠加載該二進制數據。 您可以通過整行轉換行來加快進程,如下所示:

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

請注意, 'd' * len(matrix_row)是矩陣大小的常量,因此您只需計算一次該格式字符串。

我不知道fortran,所以很難說你在那邊做什么容易解析。

聽起來你的選擇是以明文保存雙打(意思是,將它們“轉換”為字符串),或者以二進制(使用struct等)保存雙打。 決定哪一個更好取決於。

我會選擇明文解決方案,因為這意味着文件易於閱讀,而且您不必混淆不同類型的細節(字節順序,默認雙倍大小)。
但是,有些情況下二進制文件更好(例如,如果你有一個非常重要的雙精度列表,空間很重要,或者你更容易解析它而你需要優化) - 但這可能不是你的情況。

您可以使用JSON

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

文件內容如下:

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

如果易讀性和易用性很重要(並且文件大小合理),Fortran可以輕松地解析一個簡單的數字數組,至少如果它事先知道矩陣的大小(使用READ(FILE_ID,'2(F)) '), 我認為):

1.234  5.6789e4
3.1415 9.265358978
42     ...

Python代碼中的兩個嵌套for循環可以輕松地以此形式編寫矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM