ndarray array2string输出格式

时间:2018-12-22 03:08:39

标签: python numpy numpy-ndarray

我知道这是一个简单的问题,但是只能找到SO的部分答案,而无法从Python或Numpy文档中弄清楚该怎么做。我确定它已经记录在案,只是我听不懂。

我需要使用固定格式(13.7e处为6个字段)进行打印/写入。我需要打印的数组可能具有4、8、12或更多值。我找到了np.array2string,几乎是我所需要的{strong> 。

  • 是否有消除前[和后]的方法?
  • 同样,有一种方法可以避免缩进2号和 以下几行?

解决方案不必使用array2string。这是我发现控制ndarray的打印/写入格式最简单的方法。我愿意接受任何解决方案。 :-)

这是我的一个简单示例,用于演示我想要的行为以及得到的结果:

>>> import numpy as np
>>> foo = np.arange(4.0)
>>> # this shows desired output with 4 values
>>> print( ('%13.7e'*4) % (foo[0], foo[1], foo[2], foo[3]) )
0.0000000e+001.0000000e+002.0000000e+003.0000000e+00
>>> print ( np.array2string(foo, separator='', formatter={'float_kind':'{:13.7e}'.format}) )
[0.0000000e+001.0000000e+002.0000000e+003.0000000e+00]
>>> foo = np.arange(12.0)
>>> print ( np.array2string(foo, separator='', max_line_width=80, formatter={'float_kind':'{:13.7e}'.format}) )
[0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
 6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01]
>>> # this shows desired output with 12 values
>>> print( ('%13.7e'*6) % (foo[0], foo[1], foo[2], foo[3], foo[4], foo[5]) )
0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
>>> print( ('%13.7e'*6) % (foo[6], foo[7], foo[8], foo[9], foo[10], foo[11]) )
6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01

1 个答案:

答案 0 :(得分:1)

np.array2string的输出只是一个字符串。您可以使用普通的字符串方法设置其格式。例如,您可以使用以下方法去除引线/尾部括号并用空格替换空白:

foo = np.arange(12.)
s = (np.array2string(foo, 
         separator='', 
         formatter={'float_kind':'{:13.7e}'.format}, 
         max_line_width=80).strip('[]').replace(' ', ''))
print(s)
# prints:
0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01