【问题标题】:Can numpy.savetxt be used on N-dimensional ndarrays with N>2?numpy.savetxt 可以用于 N>2 的 N 维 ndarray 吗?
【发布时间】:2012-11-21 14:47:17
【问题描述】:

我正在尝试使用 numpy.savetxt 将 4D numpy 浮点数组输出到纯文本文件

但是 numpy 给出了一个错误,说当我尝试传递这个数组时需要一个浮点参数。尽管如此,numpy doc指定要传递的参数应该是数组......而不是它应该是最大等级2。我可以让它工作的唯一方法是将数据重塑为2D(这实际上不是出于数据组织的原因总是实用的)

有办法解决吗?还是必须将 numpy 数组重塑为二维? 我希望能够像逐列样式一样读取 fortran 中的数据(通过维度进行处理)。

还有其他可能性吗?请注意,我不想使用 npy 格式,因为我寻求与另一个需要纯文本格式的程序的兼容性。

【问题讨论】:

    标签: python file-io multidimensional-array numpy


    【解决方案1】:

    如果您查看numpy.savetxt 的源代码,您会发现

        for row in X:
            fh.write(asbytes(format % tuple(row) + newline))
    

    所以numpy.savetxt 仅适用于一维或二维阵列。

    为了互操作性,如果您有足够的内存将 numpy 数组转换为列表,则可以使用 JSON:

    import json
    import numpy as np
    a = np.arange(24).reshape(-1, 2, 3, 4).astype('float')
    a[0,0,0,0] = np.nan
    with open('/tmp/out', 'w') as f:
        json.dump(a.tolist(), f, allow_nan = True)
    

    产量

    [[[[NaN, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0], [8.0, 9.0, 10.0, 11.0]], [[12.0, 13.0, 14.0, 15.0], [16.0, 17.0, 18.0, 19.0], [20.0, 21.0, 22.0, 23.0]]]]
    

    【讨论】:

    • 谢谢,优雅。虽然不能用于我的目的。然而它让我发现了json。谢谢。在任何情况下,我需要与之通信的应用程序总是需要 2D 数据(正如我发现的那样)。所以我想这取决于我“智能地”重塑 numpy 数组
    【解决方案2】:

    另一种方法是将数组保存为简单的数字列表(数组的平面版本),并保存有关其形状的信息。

    多维数组的问题在于,即使是文本格式,在程序之间移动也不是那么简单。

    你可以这样做:

    myarray = rand(5,5,5)
    name = 'myarray'+myarray.shape+'.txt'
    np.savetxt(name,myarray.flatten())
    

    并使用文件名中包含的大小信息来恢复初始形状

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多