我在Mathematica中生成了一些数据,需要将这些数据导入Python。数据的生成方式依赖于符号计算,因此简单地在Python中生成数据就不成问题了。数据是一个维度数组(126,2),但是每个元素的第一个位置是整数,第二个位置是列表列表,并且每个元素的维度都不恒定,例如:
`
{
{-9,{{4,2},{5,6},{8,10}}},
{-2,{{3,6},{6,1}}}
{4,{{3,6},{6,1},{3,6},{6,1},{3,6},{6,1},{3,6},{6,1}}}
}
`
将是前三个元素。每个元素中的第二个位置将始终是二维列表的列表。这里的目标是将这些数据作为numpy数组导入,这样我就可以调用每个元素,无论其位置如何。
我在numpy.genfromtxt("data.txt",delimiters="}}}")
上取得了一些成功,它为我提供了正确的形状(126,2),但是每个元素都只是“ nan”。
我在...上获得了更多成功
`
with open("data.csv") as csvfile:
reader = csv.reader(csvfile, delimiter=' ')
for element in reader:
print(np.asarray(element)[0])
`
这给了我整数值作为数组,这太好了!对于我尝试过的每个元素的第二个位置:
`
def replace_all(text, dic):
for i, j in dic.items():
text = text.replace(i, j)
return text
d={"{":"[","}":"]"}
with open("spinweights.csv") as csvfile:
reader = csv.reader(csvfile, delimiter=',')
it=0
for element in reader:
while it<1:
curlToSq=replace_all(str(element[1]),d)
print(np.asarray(curlToSq))
`
在replace_all
函数将所有花括号都更改为方括号的情况下(此处的想法是,这将使转换为numpy数组更加容易)。那里的最后一行做返回一个数组... ... shape(),没有对象可以下标,这就是我所需要的!
感谢您的帮助。
答案 0 :(得分:1)
我认为将其转换为列表结构最简单。
我在下面添加了,
:
In [22]: astr=""" {
...: {-9,{{4,2},{5,6},{8,10}}},
...: {-2,{{3,6},{6,1}}},
...: {4,{{3,6},{6,1},{3,6},{6,1},{3,6},{6,1},{3,6},{6,1}}}
...: }"""
In [23]: astr1=astr.replace('{','[').replace('}',']').replace('\n','')
In [24]: astr1
Out[24]: ' [ [-9,[[4,2],[5,6],[8,10]]], [-2,[[3,6],[6,1]]], [4,[[3,6],[6,1],[3,6],[6,1],[3,6],[6,1],[3,6],[6,1]]] ]'
各种字符串评估器。 eval
始终可用。 ast
比较安全。 json.loads(astr1)
也可以。
In [25]: alist= eval(astr1)
In [26]: alist
Out[26]:
[[-9, [[4, 2], [5, 6], [8, 10]]],
[-2, [[3, 6], [6, 1]]],
[4, [[3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1]]]]
如果必须是数组,请执行以下操作:
In [27]: arr = np.array(alist)
In [28]: arr
Out[28]:
array([[-9, list([[4, 2], [5, 6], [8, 10]])],
[-2, list([[3, 6], [6, 1]])],
[4,
list([[3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1]])]],
dtype=object)
这是(3,2)。 arr[:,0]
是整数数组,而arr[:,1]
是列表数组。
genfromtxt
作为默认值尝试将输入转换为浮点数(它可以转换的内容变为nan
)。它用于csv
-整齐的字符串数表,每行的列数相等。
答案 1 :(得分:1)
您可以将Export
与"JSON"
或"PythonExpression"
结合使用,以将数据导出到文件中。这些都可以由Python直接读取。
下面我用ExportString
进行演示。
使用
x =
{
{-9, {{4, 2}, {5, 6}, {8, 10}}},
{-2, {{3, 6}, {6, 1}}},
{4, {{3, 6}, {6, 1}, {3, 6}, {6, 1}, {3, 6}, {6, 1}, {3, 6}, {6, 1}}}
};
然后
ExportString[x, "JSON", "Compact" -> True]
[[-9,[[4,2],[5,6],[8,10]]],[-2,[[3,6],[6,1]]],[4,[[3,6],[6,1],[3,6],[6,1],[3,6],[6,1],[3,6],[6,1]]]]
或
ExportString[x, "PythonExpression"]
[[-9, [[4, 2], [5, 6], [8, 10]]], [-2, [[3, 6], [6, 1]]], [4, [[3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1], [3, 6], [6, 1]]]]
Wolfram语言(又称Mathematica)可以导入和导出many formats,其中上面两个是它支持的Basic Formats。通常不需要定制输出的代码消耗,因为通常存在其他平台可以幼稚(或具有要读取的库)的可用格式。
希望这会有所帮助。