将值保存在列表列表中(Numpy)

时间:2014-07-05 15:47:05

标签: python arrays list csv numpy

我有一个列表,其中包含我想保存以供以后使用的值。将它们保存为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中。有人可以帮忙吗?如果这不可取,我愿意接受替代方案。

2 个答案:

答案 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])}}