【问题标题】:How to print a numpy array as a string of the format (1 2) (3 4) (5 6)?如何将 numpy 数组打印为格式为 (1 2) (3 4) (5 6) 的字符串?
【发布时间】:2018-08-01 17:10:54
【问题描述】:

我有一个 numpy 数组,如下所示:

[[181  2]
 [  3 45]
 [  5  6]]

但是,我需要将其打印为这种新格式:

(181 2) (3 45) (5 6)

我试过了:

' '.join(map(str, my_arr)).replace('[','(').replace(']',')')

但是,由于原始 numpy 数组中的空格,映射包含此空格,因此我的结果是:

(181  2) (  3 45) (  5  6)

其中包括原始空格。不幸的是,这对我来说是一种不可接受的格式,但我无法找到解决方案。

我也尝试过先将数组展平,然后将其转换为以下格式的数字字符串:

181 2 3 45 5 6

但是,从这里我不知道如何为每对数字插入 ( 和 ) 字符以获得上述所需的格式?

【问题讨论】:

  • “很遗憾,这是我无法接受的格式。”请问您要求对数字数据进行严格的字符串格式化的目的是什么?
  • 我无法控制的流程仅采用这种格式。该数组是在 numpy 中完成的大量线性代数的最终结果,所以最后我留下了一个格式错误的数组。

标签: python string numpy format


【解决方案1】:

试试这个

' '.join(map(lambda row : '(' + ' '.join(map(str, row)) + ')', my_arr))

【讨论】:

  • 尝试向 OP(以及其他有类似问题的人)添加一些解释,说明为什么会这样
【解决方案2】:

一个解决方案。但是您应该考虑是否真的需要对数字数据执行这种操作。

import numpy as np

arr = np.array([[181,  2],
                [  3, 45],
                [  5,  6]])

print(''.join('('+' '.join(map(str, i))+') ' for i in arr))

# (181 2) (3 45) (5 6) 

【讨论】:

    【解决方案3】:

    收藏还有一个:

    >>> from itertools import starmap
    >>> a = np.arange(6).reshape(3, 2)
    >>> ' '.join(starmap(' '.join(a.shape[1] * ['{}']).join('()').format, a))
    '(0 1) (2 3) (4 5)'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2020-07-29
      • 2016-02-07
      • 2019-08-21
      相关资源
      最近更新 更多