【问题标题】:numpy.savetxt- Save one column as int and the rest as floats?numpy.savetxt - 将一列保存为 int,将其余列保存为浮点数?
【发布时间】:2017-02-23 03:17:41
【问题描述】:

问题

所以我有一个二维数组(151 行,52 列),我想使用 np.savetxt 将其保存为文本文件。但是,我希望第一列的数字保存为整数(1950、1951 等),而其余数据保存为精度 5(四舍五入)浮点数(2.7419、2.736 等)。我不知道该怎么做。

守则

当我打印数组输出的前 4 行和 3 列时,它看起来像这样。

[[1950.2.7407 2.7396]

[1951. 2.7419 2.736]

[1952. 2.741 2.7374]

[1953.2.7417 2.7325]]

当我使用以下...

np.savetxt('array.txt',data,fmt="%1.4f")

该数组将第一列保存为精度为 5 的浮点数,与其余数据(1950.0000、1951.0000 等)一样。当我尝试指定不同的格式时...

np.savetxt('array.txt',data,fmt="%i %1.4f")

我收到以下错误:“ValueError: fmt has wrong number of % formats: %i %1.4f”

问题

我有没有办法说将第一列保存为整数,将其余列保存为浮点数?

【问题讨论】:

    标签: python arrays numpy text-files number-formatting


    【解决方案1】:

    data 有 3 列,因此您需要提供 3 个'%format's。例如:

    np.savetxt('array.txt', data, fmt='%i %1.4f %1.4f')
    

    应该可以。如果您的列多于 3 列,您可以尝试以下方法:

    np.savetxt('array.txt', data, fmt=' '.join(['%i'] + ['%1.4f']*N))
    

    其中N 是需要浮点格式的列数。

    【讨论】:

    • 第二种解决方案正是我所需要的。谢谢!
    • “分隔符”参数是否适用于第二种解决方案?我尝试使用制表符分隔符,但它不起作用。
    • @TomKurushingal,根据the documentation,如果您使用多格式字符串,如上所示,delimiter 关键字参数将被忽略:“单一格式 (%10.5f),序列格式或多格式字符串,例如 'Iteration %d – %10.5f',在这种情况下,分隔符将被忽略。”您可以 (a) 将 "\t" 用于 str.join 或 (b) 提供不带 joining 的格式列表,然后使用 delimiter="\t"
    【解决方案2】:

    作为@wflynny 但没有加入:

    np.savetxt('array.txt', data, fmt='%i'+' %1.4f'*N)
    

    【讨论】:

      【解决方案3】:

      您的fmt 参数需要与您尝试格式化的列具有相同数量的%。您正在尝试格式化 3 列,但只提供 2 种格式。

      尝试将您的 np.savetxt(...) 更改为

      np.savetxt('array.txt',data,fmt="%i %1.4f %1.4f")
      

      【讨论】:

        【解决方案4】:

        在我的情况下,我的数据矩阵的列是自动连接的,这是我不想要的。 要使用单独的列保持格式,您可以添加分隔符“;”。 解决方案如下所示:

        np.savetxt('array.txt',data,fmt='%i' + ';%1.4f' * 4)
        

        附言我保存为 .csv

        【讨论】:

          猜你喜欢
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-11
          • 2013-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多