2016-01-22 36 views
0

我有一個以浮點格式表示的1d數組值,我需要以5E16.8格式打印這些數據(每行5個條目,實際格式,每個條目16個空格),如下所示以5E16.8格式打印1d數組

7.49381113E-01 1.87971394E-14 8.19110455E-01 -2.75795136E-16 -1.12488769E-16 
    1.64873995E-01 -7.45597632E-02 -2.34514676E-15 -3.14121102E-17 6.96946913E-02 

是否有任何快速簡單的方法來指定此輸出格式? 謝謝!

+0

你想通過線來打印一氣呵成整個陣列,或者只是行? – Reti43

回答

0

您有兩種字符串格式選項。

  1. str.format(),例如, '{:16.8E}'.format(4.5)
  2. 運營商,例如, '%16.8E' % (4.5,)

前者推薦用於Python 3.x以及任何高於2.6的版本。百分比運算符可用於向後兼容Python 2.5或更低版本。要進一步討論你應該使用哪一個,並在哪裏,read here。有關如何格式化字符串的一些快速示例,請查看文檔here

我會繼續使用str.format()來回答,但使用其他選項會導致非常類似的方法。


'{:16.8E}'是你所需要的,所以你要重複這5次整條生產線分別通過這5個元素進行打印。

fmt = '{:16.8E}' 
line_fmt = fmt * 5 
print(line_fmt.format(*arr[0:5])) # `arr` is the name of your 1d array 

語法*arr[0:5]解包值。這有效地傳遞了5個不同的參數arr[0], arr[1], arr[2], arr[3], arr[4],而不是一個包含5個元素的數組。

您可以在循環中重複使用此選項以根據需要打印任意多行。但是,如果打算打印所有元素,則一次打印它們的速度會更快,方法是準備字符串格式以使每五個項目都有換行符。

import numpy as np 

items_per_line = 5 

np.random.seed(1024) 
arr = np.random.random(size=12) 

fmt = '{:16.8E}' 
line_fmt = items_per_line * fmt 

arr_fmt = [line_fmt] * (arr.shape[0] // items_per_line) 
remainder = arr.shape[0] % items_per_line 
if remainder: 
    arr_fmt.append(remainder * fmt) 
arr_fmt = '\n'.join(arr_fmt) 

print(arr_fmt.format(*arr)) 

結果

6.47691231E-01 9.96913580E-01 5.18803264E-01 6.58112731E-01 5.99063472E-01 
    7.53067334E-01 1.36247128E-01 4.11711641E-03 1.49508880E-01 6.98439001E-01 
    5.93352562E-01 8.99915349E-01 
0

您可以用formatting of string玩,直到你的願望的結果,並根據需要5%的線,許多方式可以做到這一點,你可以使用gruper recipe從itertools,做這樣的事情:

from itertools import zip_longest 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return zip_longest(*args, fillvalue=fillvalue) 

def my_print(data,size=5): 
    for group in grouper(data,size): 
     print(" ".join("{: .8e}".format(x) for x in group if x is not None)) 
在此我拿5個元素的組時

和組中變換每個數字的慾望格式"{: .8e}".format(x),然後加入一起

測試

>>> test=[0.749381113, 1.87971394e-14, 0.819110455, -2.75795136e-16, -1.12488769e-16, 0.164873995, -0.0745597632, -2.34514676e-15, -3.14121102e-17, 0.0696946913, 0.0, 0.00002541] 
>>> my_print(test) 
7.49381113e-01 1.87971394e-14 8.19110455e-01 -2.75795136e-16 -1.12488769e-16 
1.64873995e-01 -7.45597632e-02 -2.34514676e-15 -3.14121102e-17 6.96946913e-02 
0.00000000e+00 2.54100000e-05 
>>>