2016-07-27 3 views
0

내가 아래 표와 같이 여러 형식의 np.savetxt의 배열을 파일로 인쇄하려고 : 이미 A1A2 두 답변을 보았다파이썬에서 float의 정밀도를 제어하여 여러 데이터 형식의 배열을 인쇄하는 방법은 무엇입니까?

import numpy as np 
f = open('./multiple_format.dat', 'w') 
c1 = np.array(['A', 'B']) 
n1 = np.array([1.545446367853, 6.8218467347894]) 
n2 = np.array([1.546715887182, 2.9718145367852]) 

np.savetxt(f, np.column_stack([c1, np.around(n1, decimals = 3), np.round(n2, 3)]), fmt='%s', delimiter='\t') 

, 그 게시물에 몇 가지 답변은 문자 폭을 필요로 지정하고 아래와 같이 따라 공백은이 폭보다 짧은 경우 문자열 배열하기 전에 제공됩니다

import numpy as np 
f = open('./multiple_format.dat', 'w') 
c1 = np.array(['A', 'B']) 
n1 = np.array([1.545446367853, 6.8218467347894]) 
n2 = np.array([1.546715887182, 2.9718145367852]) 

A['v1'] = c1 
A['v2'] = n1 

np.savetxt(f, A, fmt="%10s %10.3f") 

내가 문자열 전에 공간을 선도하지 않아도 내가 배열을 인쇄하는 np.savetxt 필요 정밀도를 제어하는 ​​다중 데이터 형식 수레의. 어떻게 이것을 파이썬에서 할 수 있습니까?

답변

0

savetxt의 핵심은 그것은 당신의 배열의 행을 반복 할

  for row in X: 
      try: 
       fh.write(asbytes(format % tuple(row) + newline)) 

이며,

format % tuple(row) 

문자열로 돌려 적용됩니다.

formatfmt 매개 변수로 구성됩니다. 2 % items it uses the fmt`와 귀하의 경우와 같이 :

In [95]: "%10s %10.3f"%tuple(np.array([1.545446367853, 6.8218467347894])) 
Out[95]: '1.54544636785  6.822' 

는 간격과 정밀도에 관해서 그래서 때, 당신은 표준 파이썬 형식 시스템의 자비에 있습니다. 나는 그런 종류의 표현으로 직접 연주하는 것이 좋습니다.

In [96]: "%.2f, %10.3f"%tuple(np.array([1.545446367853, 6.8218467347894])) 
Out[96]: '1.55,  6.822' 
In [97]: "%.2f, %.10f"%tuple(np.array([1.545446367853, 6.8218467347894])) 
Out[97]: '1.55, 6.8218467348' 
In [106]: (', '.join(["%.2e"]*2))%tuple([1.545446367853, 6.8218467347894]) 
Out[106]: '1.55e+00, 6.82e+00' 
관련 문제