[英]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.