【问题标题】:Saving values in a list of lists (Numpy)将值保存在列表列表中(Numpy)
【发布时间】:2014-08-26 14:32:14
【问题描述】:

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

【问题讨论】:

  • 您的第一个数据结构似乎是 numpy 数组的字典。由于您使用modes[1] 访问该元素,因此您可能拥有这些字典的列表或字典。所以我假设你所拥有的实际上是一个 numpy 数组的字典列表,对吗?
  • 如何确定 1 等.. 来自哪里以及输出中的元组在哪里?
  • 听起来不错,老兄。
  • @PadraicCunningham 1 来自我寻找模式 m = 1 的所有共振状态。它可以是任何整数。
  • @PadraicCunningham 正确

标签: python arrays list csv numpy


【解决方案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))) )

虽然我应该提一下,我很快就把它放在一起了。应该有更好的方法来编写我现在没有想到的相同内容。

【讨论】:

    【解决方案2】:

    CSV 是一种具有嵌套数据的具有挑战性的格式。如果您有嵌套的 numpy 和本机 Python 数据结构,则更是如此。

    如果您必须读写 CSV,则需要滚动您自己的逻辑。 Numpy 的 savetxt 不支持包含您在示例中显示的 numpy 数组的 Python 字典。

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

    鉴于该数据结构,您可以将其保存为腌制文件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 2011-05-22
      • 2019-10-26
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      相关资源
      最近更新 更多