【问题标题】:Setting the fmt option in numpy.savetxt在 numpy.savetxt 中设置 fmt 选项
【发布时间】:2023-03-04 16:16:01
【问题描述】:

我正在查看numpy.savetxt,并被困在fmt 选项上。

我尝试查看here 以及链接下方所有可用于fmt 选项排序的字母的参考,让我大致了解正在发生的事情。

我不明白的是,如果% 符号是必需的,并且在给出here 的示例中,我应该如何解释 10.5 数字? 如果 "f" 是关于设置浮点数,那它怎么会是 10.5(再说一遍,我可能不知道浮点数是如何设置的……)。

【问题讨论】:

  • %10.5f 中的 10 和 5 由您第一次链接到的文档中的第 4. 和 5. 点描述。
  • 傻我...谢谢!直到您指出这些点,我才意识到这些点实际上是我的问题的答案!所以在这种情况下,字段只是like in here。这很整洁!

标签: python arrays string numpy save


【解决方案1】:

知道np.savetxt只适用于一维或二维数组,大体思路是:

  • fmt 是单个格式化字符串时,它适用于 数组(一维或二维输入数组)
  • fmt 是一系列格式化字符串时,它适用于二维输入数组的每一列

我在这里展示一些使用以下输入数组的示例:

import numpy as np

a = np.array([[11, 12, 13, 14],
              [21, 22, 23, 24],
              [31, 32, 33, 34]])

1) 设置浮点精度:np.savetxt('tmp.txt', a, fmt='%1.3f')

11.000 12.000 13.000 14.000
21.000 22.000 23.000 24.000
31.000 32.000 33.000 34.000

2) 添加字符以右对齐。

带空格:np.savetxt('tmp.txt', a, fmt='% 4d')

  11   12   13   14
  21   22   23   24
  31   32   33   34

零:np.savetxt('tmp.txt', a, fmt='%04d')

0011 0012 0013 0014
0021 0022 0023 0024
0031 0032 0033 0034

3) 向左对齐添加字符(使用“-”)。

带空格:np.savetxt('tmp.txt', a, fmt='%-4d')

11   12   13   14  
21   22   23   24  
31   32   33   34  

4)fmt为格式化字符串序列时,二维输入数组的每一行都按照fmt处理:

fmt 作为单个格式化字符串中的序列

fmt = '%1.1f + %1.1f / (%1.1f * %1.1f)'
np.savetxt('tmp.txt', a, fmt=fmt)

11.0 + 12.0 / (13.0 * 14.0)
21.0 + 22.0 / (23.0 * 24.0)
31.0 + 32.0 / (33.0 * 34.0)

fmt 作为格式化字符串的迭代器

fmt = '%d', '%1.1f', '%1.9f', '%1.9f'
np.savetxt('tmp.txt', a, fmt=fmt)

11 12.0 13.000000000 14.000000000
21 22.0 23.000000000 24.000000000
31 32.0 33.000000000 34.000000000

【讨论】:

    【解决方案2】:

    这个link 可能会有所帮助。

    来自链接:

    format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
    fill        ::=  <any character>
    align       ::=  "<" | ">" | "=" | "^"
    sign        ::=  "+" | "-" | " "
    width       ::=  integer
    precision   ::=  integer
    type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
    

    Width 是定义最小字段宽度的十进制整数。如果不指定,则字段宽度将由内容决定。

    当没有给出明确的对齐方式时,在宽度字段前加上一个零 ('0') 字符会启用数字类型的符号感知零填充。这相当于填充字符为“0”,对齐类型为“=”。

    精度是一个十进制数,表示对于格式为“f”和“F”的浮点值,应在小数点后显示多少位,对于格式为“”的浮点值,应在小数点前后显示多少位g'或'G'。对于非数字类型,该字段指示最大字段大小 - 换句话说,从字段内容中将使用多少个字符。整数值不允许精度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 2016-07-09
      相关资源
      最近更新 更多