【问题标题】:Data from Mathematica import to Python从 Mathematica 导入到 Python 的数据
【发布时间】:2017-05-25 06:42:08
【问题描述】:

我有一个包含从 Mathematica 获得的 3 维数组 (100X100X100) 的文本文件。数据用逗号和花括号存储。我想使用这个文本文件来分析和使用 Python 绘制数据。如何在 Python 中导入数据?我目前使用的是 Python 2.7 版本。将数据存储在 matematica 中以便在 Python 中使用的格式可能是什么?

【问题讨论】:

  • 参见this discussion,例如。
  • 您可能需要考虑使用 Pandas。 pandas.pydata.org
  • 这当然取决于文本文件的结构。你是怎么Export它的?如果你有原生mathematica格式(逗号和花括号分隔的Id建议先选择更友好的格式)
  • 它以您提到的本机格式存储。方便的格式是什么?

标签: python import wolfram-mathematica


【解决方案1】:

因为看到人们在 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)

请注意,如果您在不同的硬件上读/写,您可能会遇到字节序问题。 (虽然很容易处理)

编辑:为了完整起见,使用本机数学格式的文本交换如下所示:

数学:

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 不应用于不受信任的输入,其次,如果任何值使用科学记数法或显然任何数学符号内容,这将破坏。最后,对于大量输入,无疑会非常缓慢。如果您遇到了一个mathematica 文件并且无法使用mathematica 将其转换为更好的格式,我会认真地使用它。

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多