我有一个列表,其中包含我想保存以供以后使用的值。将它们保存为CSV似乎很痛苦,所以首先我要将列表转换为数组。
列表的名称是“模式”。 'modes'中的每个条目都包含表示该模式的共振状态的值列表。第一个坐标是实部,第二个坐标是虚部。
# The resonant states of the mode m = 1
In [178]: modes[1]
Out[178]:
{0: array([ 1.12059699, -0.24524525]),
1: array([ 2.71832424, -0.26526527]),
2: array([ 4.28671194, -0.26526527]),
3: array([ 5.87902919, -0.26526527]),
4: array([ 7.44744745, -0.27266801]),
5: array([ 9.02645242, -0.26526527]),
6: array([ 10.61500625, -0.28528529])}
大约有100种模式,每种模式包含50个坐标。我想将这些点转移到具有元组的数组(模式,实部,图像部分)。例如,上面的部分是:
array ([[ 1, 1.12059699, -0.24524525],
[ 1, 2.71832424, -0.26526527],
[ 1, 4.28671194, -0.26526527],
etc....
该数组将包含所有模式的所有共振状态。然后我将这个数组存储到CSV中。有人可以帮忙吗?如果这不可取,我愿意接受替代方案。
答案 0 :(得分:1)
这样的事情应该有效:
import numpy as np
temp = np.array(modes[0].values())
result = np.hstack( (np.zeros((temp.shape[0], 1)), temp) )
for i in range(1, len(modes)):
temp = np.array(modes[i].values())
result = np.vstack( (result, np.hstack((i * np.ones((temp.shape[0], 1)), temp))) )
虽然我应该提一下,我把它放在一起很快。应该有更好的方式来编写我现在没想到的同样的东西。
答案 1 :(得分:1)
CSV是一种具有嵌套数据的具有挑战性的格式。如果您有嵌套的numpy和本机Python数据结构,那么更多。
如果您必须读写CSV,则需要自行编写逻辑。 Numpy的savetxt
不支持Python dict,它包含您在示例中显示的numpy数组。
Python pickle确实支持本机和numpy数据以及嵌套数据:
m={0:{
0: np.array([ 1.12059699, -0.24524525]),
1: np.array([ 2.71832424, -0.26526527]),
2: np.array([ 4.28671194, -0.26526527])},
1:{
3: np.array([ 5.87902919, -0.26526527]),
4: np.array([ 7.44744745, -0.27266801]),
5: np.array([ 9.02645242, -0.26526527]),
6: np.array([ 10.61500625, -0.28528529])}
}
鉴于数据结构,您可以将其保存为pickle文件:
with open(fn, 'w') as fout:
fout.write(pickle.dumps(m))
并回读:
with open(fn) as fin:
mr=pickle.loads(fin.read())
print mr
打印:
{0: {0: array([ 1.12059699, -0.24524525]), 1: array([ 2.71832424, -0.26526527]), 2: array([ 4.28671194, -0.26526527])}, 1: {3: array([ 5.87902919, -0.26526527]), 4: array([ 7.44744745, -0.27266801]), 5: array([ 9.02645242, -0.26526527]), 6: array([ 10.61500625, -0.28528529])}}