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

问题描述 投票:0回答:3

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

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

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

有没有建议将高效的算法从python嵌套数组转换为mathematica数组?

python arrays list wolfram-mathematica
3个回答
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]

0
投票

作为一般规则,如果您担心读/写文件的效率,您应该读/写二进制数据。相反,如果您致力于文本文件,请不要担心效率问题。

我认为你的提议中没有任何重大错误,无法将嵌套数组写入字符串,然后用Mathematica喜欢的括号替换括号。

但就个人而言,如果嵌套数组是常规的,如果我们坚持使用文本文件,我建议写一个文件:

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

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

您可以使用Mathematica最近的ExternalEvaluate["Python", ...]功能做得更好,避免文件写入和阅读。但这并不是我经历过的经历。


0
投票

您可以使用Import"JSON""BSON""PythonExpression"从文件中导入数据。其中任何一个都可以由Python直接导出。

Wolfram语言(a.k.a.Mathematica)可以导入和导出many formats,上面是它支持的一些Basic Formats

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.