簡體   English   中英

來自Mathematica的數據導入到Python

[英]Data from Mathematica import to Python

我有一個包含從Mathematica獲得的3維數組(100X100X100)的文本文件。 數據以逗號和花括號存儲。我想使用此文本文件來使用Python分析和繪制數據。 如何在Python中導入數據? 我目前正在使用Python 2.7版本。 為了在Python中使用數據,將數據存儲在matematica中的格式可能是什么?

由於看到人們在ascii中存儲如此多的數據讓我很痛苦,因此,這里是一種進行二進制交換的方法:

數學:

data = RandomReal[{-1, 1}, {3, 4, 5}]
f = OpenWrite["test.bin", BinaryFormat -> True];
BinaryWrite[f, ArrayDepth[data], "Integer32"];
BinaryWrite[f, Dimensions[data], "Integer32"];
BinaryWrite[f, data, "Real64"];
Close[f]

蟒蛇:

import numpy as np
with open('test.bin','rb') as f:
 depth=np.fromfile(f,dtype=np.dtype('int32'),count=1)
 dims =np.fromfile(f,dtype=np.dtype('int32'),count=depth)
 data =np.reshape(np.fromfile(f,dtype=np.dtype('float64'),
         count=reduce(lambda x,y:x*y,dims)),dims)

請注意,如果您在其他硬件上進行讀/寫操作,則可能會遇到字節順序問題。 (雖然容易處理)

編輯:為完整起見,使用本機mathematica格式的文本交換如下所示:

數學:

m = RandomReal[{-1, 1}, {8, 8}]
m >> out.m

蟒蛇:

with open('out.m','r') as f: text=f.read()
for rep in (('{','['),('}',']')):text=text.replace(rep[0],rep[1])
array=eval(text)

需要特別注意的是,首先不應該對非組合輸入使用eval ,其次,如果任何值使用科學計數法或明顯地使用任何mathmatica符號內容,則此方法將失效。 最后,毫無疑問,對於大輸入而言,它將會非常緩慢。 如果您堅持使用mathematica文件,並且不能使用mathematica將其設置為更好的格式,我將只使用它。

暫無
暫無

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

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