将Python中的数字表格保存为Mathematica易于阅读的格式?

时间:2016-01-25 12:28:08

标签: python-2.7 wolfram-mathematica

我在Python中运行模拟。模拟结果总结在数字矩阵列表中。有没有一个很好的导出格式我可以用来编写这个列表,以便以后我可以轻松地在Mathematica中读取文件,Mathematica会自动将其识别为矩阵列表?

2 个答案:

答案 0 :(得分:2)

嗯,这取决于你的矩阵有多大以及速度或记忆是否值得关注。最简单的解决方案是自己创建纯文本 Mathematica 表达式。只需遍历您的矩阵并在Mathematica formate中创建它们的列表。这归结为在文件中编写大括号和数字

{mat1, mat2, ...}

其中mat1等本身就是数字列表的列表。

更新1

如果您想要标准格式,那么您可以轻松查看import into Mathematica。击中眼睛的一件事(在被MTX击中之后,显然不起作用)是MAT format。快速搜索似乎表明,您可以write those files with Python

更新2

关于你的评论

  

Pythonica看起来不错。遗憾的是,我在没有安装Mathematica的集群上运行Python模拟。我在我的个人电脑中使用Mathematica进行后期处理。

好的,但是包甚至没有500行代码。为什么不撇开它,只是取出你需要的东西:将任意Python列表转换为 Mathematica 代码的代码

_id_to_mathematica = lambda x: str(x)


def _float_to_mathematica(x):
    return ("%e" % x).replace('e', '*10^')


def _complex_to_mathematica(z):
    return 'Complex' + ('[%e,%e]' % (z.real, z.imag)).replace('e', '*10^')


def _str_to_mathematica(s):
    return '\"%s\"' % s


def _iter_to_mathematica(xs):
    s = '{'
    for x in xs:
        s += _python_mathematica[type(x)](x)
        s += ','
    s = s[:-1]
    s += '}'
    return s


_python_mathematica = {bool: _id_to_mathematica,
                       type(None): _id_to_mathematica,
                       int: _id_to_mathematica,
                       float: _float_to_mathematica,
                       long: _id_to_mathematica,
                       complex: _complex_to_mathematica,
                       iter: _iter_to_mathematica,
                       list: _iter_to_mathematica,
                       set: _iter_to_mathematica,
                       xrange: _iter_to_mathematica,
                       str: _str_to_mathematica,
                       tuple: _iter_to_mathematica,
                       frozenset: _iter_to_mathematica}

l = [[1, 2, 3], 1, [1, 5, [7, 3, 7, 8]]]
print(_iter_to_mathematica(l))

输出是一个字符串

{{1,2,3},1,{1,5,{7,3,7,8}}}

您可以直接保存到文件中并使用Get将其加载到 Mathematica

答案 1 :(得分:1)

矩阵有多大?

如果它们不是太大,JSON格式将运行良好。我使用过这个,很容易在Python和Mathematica中使用它。

如果它们很大,我会试试HDF5。我没有从Python编写这个的经验,但我知道它可以存储多个数据集,因此它可以存储多个不同大小的矩阵。