【问题标题】:Where is this \n coming from in my arrays (Python)?这个 \n 来自我的数组(Python)中的哪里?
【发布时间】:2020-10-15 09:52:42
【问题描述】:

我正在尝试为以下 numpy 数组创建一个文本字符串:

A = array([0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0])

我可以用这行代码轻松做到这一点:

text = f'{A}'

我遇到的问题是,每当我使用此 f'{}' 从数组创建字符串时,它都会输出相同的数组,但在某些字符后带有 \n:

text
'[0.   0.   0.   0.64 0.   0.   0.   0.   0.   0.   0.   0.   0.   0.\n 1.   0.   0.   0.  ]'

我正在尝试在绘图标题中使用此数组,因此我不希望该数组将文本换行到新行,因为它会使阅读/查看变得混乱。

我尝试在 text 上使用 rstrip('\n'),但它不会删除 '\n'。有谁知道发生了什么?为什么字符串数组中会弹出这个\n?

【问题讨论】:

  • 这可以工作text = ' '.join(i.strip() for i in str(A))

标签: python arrays newline word-wrap


【解决方案1】:

您无需声明 array() 即可完成您正在尝试做的事情:

A = [0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]

print(A)
[0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]

print(f'{A}')
[0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] 

A
[0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]

您似乎正在那里创建一个 NumPy N 维数组,然后将其转换为 string,因此当您调用 print() 时,它正在打印该数组的字符串表示形式。除非你特别需要一个 NumPy 数组,否则你可以像我上面那样做,或者如果你需要:

    from numpy import array
    A = [0, 0, 0, 0, 0.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
    B = array(A)

    print(B)
    [0.   0.   0.   0.   0.64 0.   0.   0.   0.   0.   0.   0.   0.   0.
     0.   1.   0.   0.   0.  ]

    print(f'{B}')
    [0.   0.   0.   0.   0.64 0.   0.   0.   0.   0.   0.   0.   0.   0.
     0.   1.   0.   0.   0.  ]

     B
     array([0.  , 0.  , 0.  , 0.  , 0.64, 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ,
       0.  , 0.  , 0.  , 0.  , 1.  , 0.  , 0.  , 0.  ])

如果您绝对必须将 NumPy 数组呈现为 string,那么您可以执行以下操作:

  text = f'{A}'
  text = text.replace("\n","")

或者正如 Ramón Márquez 也提到的,您可以简单地增加 printoptions 线宽:

numpy.set_printoptions(linewidth=96)

关于 NumPy 数组的文档:https://machinelearningmastery.com/gentle-introduction-n-dimensional-arrays-python-numpy/

关于 NumPy 打印选项的文档:https://numpy.org/doc/1.18/reference/generated/numpy.printoptions.html

【讨论】:

  • 非常感谢您的全面帖子,现在更有意义了
【解决方案2】:

the way numpy can be configured to print out arrays有关。

如果您将线宽设置为 96 — str(A) 的长度没有任何 \n 加 1 — 则不会插入换行符:

numpy.set_printoptions(linewidth=96)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2016-08-10
    • 2017-06-04
    • 2021-11-14
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多