2014-01-09 1 views
2

[2.15295647e + 01, 8.12531501e + 00, 3.97113829e + 00, 1.00777250e + 01] 나는 numpy 배열을 가지고 있으므로 그것은 다음과 같습니다 것을 [21.53, 08.13, 03.97, 10.08] 나는이 2 개 플로트 조작을 포함하도록 조정할 수있는 방법파이썬 : 1 람다 함수로 여러 플로팅 포맷을 만드는 방법

float_formatter = lambda x: "%.2f" % x 
np.set_printoptions(formatter={'float_kind':float_formatter}) 

?

% 02d % .2f % (x, y)와 같은 것이 필요하지만이를 수행하기 위해 람다 함수를 변경하는 방법을 모릅니다. 당신은 람다 표현식 단지 하나없는 여러 입력을 정의하고 이름이 임의

float_formatter = lambda x, y: "%.2f %.2f" % (x, y) 

: 당신이 당신의 람다에 두 개의 수레 작업 할 경우

+3

질문의 두 번째 절반 ("2 플로트 조작")은 어떤 방법으로 첫 번째 부분과 관련이있을 것 같지 않습니다 . 두 번째 부분의 입력은 어떻게 생겼습니까? 예상되는 결과는 무엇입니까? –

답변

1

,이 같은 두 개의 입력 인수가 필요합니다. 다른 인수 이름으로도 똑같은 것이 있습니다.

float_formatter = lambda float_one, float_two: "%.2f %.2f" % (float_one, float_two) 
0

목록의 값을 변경하려면 목록 이해력을 사용할 수 있습니다. 아래의 Python 3 예제.

import numpy as np 

precision = 2 
formatter = "{0:."+str(precision)+"f}" 

a = np.array([2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01]) 
aFormat = np.array([float(formatter.format(i)) for i in a]) 
print(a, aFormat) 

나는 처음으로 간질 피쉬의 옵션을 시도했지만 프린터 기능이 당신에게 배열을 제공하지 않습니다. 그냥 당신에게 부유물을줍니다. 그래서 만약 당신이 정말로 2d numpy 행렬에 대한 프린트 옵션을 바꾸기를 원한다면, 어떤 값을 포맷 할 것인지에 대한 외부 카운터를 가진 자신의 함수를 정의해야 할 것입니다. 아래 예제는 외부 카운터를 전역으로 설정하지 않기 때문에 클래스와 함께이를 보여줍니다.

import numpy 

class npPrint(object): 
    def __init__(self): 
     self.counter = 0 
     self.precision = 2 
    # end Constructor 

    def printer(self, x): 
     self.precision = 2 
     if self.counter == 0: 
      formatter = "{0:."+str(self.precision)+"f}" 
      self.counter += 1 
     else: 
      formatter = "{0:0"+str(self.precision)+"d}" 
      x = int(round(x)) 
      self.counter = 0 

     return formatter.format(x) 
    # end printer 

formatter = npPrint() 
a = numpy.array([[2.15295647e+01, 8.12531501e+00], [3.97113829e+00, 1.00777250e+01]]) 

numpy.set_printoptions(formatter={"float_kind": lambda x, f=formatter: f.printer(x)}) 

print(a) 

x 값이나 y 값을 건네 줄지 모르므로 카운터가 있어야합니다. 방금 플로트를받습니다. 이것은 정말로 추악합니다. 내가 너라면 나 스스로 인쇄를 처리하고 2 차원 매트릭스를 분해 할 것이다.

1

내가 아는 바로는, 배열 값에 두 개의 0이 채워지고 소수 둘째 자리로 인쇄되기를 원할 것입니다. 당신이해야 할 모든 형식 문자열을 수정할 수 있습니다 :

In [1]: "%05.2f" %np.pi 
Out[1]: '03.14' 

5가 포맷 된 문자열의 전체 길이 (소수점 포함) 5 자입니다 것을 의미한다 아래이 휴식을의 0 당신이 원하는 것을 의미한다 앞에 오는 0으로 채우는 것이고, .2은 소수점 이하 두 자리를 원한다는 것을 의미합니다. 당신의 앞에 0를 생략 할 수 있습니다,

In [2]: "%08.4f" %np.pi 
Out[2]: '003.1416 

방금 ​​선행 공백이 아닌 제로와 패드 원한다면 :

그래서 당신이 원하는 경우에, 당신이 할 것, (3) 앞의 0과 4 소수점 말 총 길이 :

In [3]: "%8.4f" %np.pi 
Out[3]: ' 3.1416' 

당신이 table of conversion flags here에 대한 읽을 수있는 다른 옵션이 있습니다.

이 새 포맷으로 이것을 설정하려면 당신은 다만 것 :

In [4]: float_formatter = lambda x: "%05.2f" %x 

In [5]: np.set_printoptions(formatter={'float_kind':float_formatter})