转换嵌套列表以在Mathematica中使用

时间:2019-02-26 15:34:13

标签: python arrays list wolfram-mathematica

所以我有一个3 x 3矩阵的嵌套列表,例如

a = [ [[1,0,3],[0,1,2],[-1,4,-8]], ... ]

我正在尝试找到一种有效的方法将其转换为Mathematica可以阅读的列表。在这种情况下,我正在考虑将a转换为字符串,然后将每个[用{替换,并将每个]替换为},然后将该字符串保存到文件中。我的猜测是那不是最有效的方法。

对于将python嵌套数组转换为mathematica数组的有效算法,是否有任何建议?

3 个答案:

答案 0 :(得分:0)

将其设为numpy.arrayflatten

import numpy as np

arr = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

np.array(arr).flatten()
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0])

或者,如果您更喜欢list,请添加tolist()

np.array(arr).flatten().tolist()
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0]

答案 1 :(得分:0)

通常,如果您担心读/写文件的效率,则应该读/写二进制数据。相反,如果您致力于文本文件,则不必担心效率问题。

在您的建议中,没有什么实质性的错误,可以将嵌套数组写入字符串,然后用Mathematica喜欢的括号替换括号。

但是,就个人而言,如果嵌套数组是规则的,并且如果我们坚持使用文本文件,则建议使用以下命令编写文件:

  • 包含嵌套数组每个维度范围的标题行,对于您的示例,它可能是3, 3, ...(或可能是..., 3, 3
  • 然后将数字3写入一行,并根据需要添加尽可能多的行

如果嵌套数组不规则,则可能需要设计一个更复杂的标题行来告诉Mathematica如何处理以下数字。但是无论您做什么,都要保持简单。

使用Mathematica的最新ExternalEvaluate["Python", ...]功能可能会做得更好,并避免文件的读写。但这不是我有经验的经验。

答案 2 :(得分:0)

您可以将Import"JSON""BSON""PythonExpression"结合使用,以从文件中导入数据。这些都可以由Python直接导出。

Wolfram语言(又称Mathematica)可以导入和导出many formats,而上述语言是它支持的Basic Formats的一部分。

希望这会有所帮助。