Python / Pandas에서 이상한 동작을보고 있습니다.
설정이 복잡하다는 것을 알고 있습니다. 몇 가지 도전을하고있었습니다.
def lucas_n(n):
'''Return the fist n lucas numbers modulo 1_000_007'''
my_list = [1,3]
while len(my_list) < n:
my_list.append((my_list[-1]+my_list[-2])%1_000_007)
return my_list
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq)
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
x = lucas_n(1e4)
f(x)
>>> -8402283173942682253
즉, x
양의 정수 시퀀스이며 f
연속 .iloc[1:].cumsum()
연산을 적용 합니다.
그리고 출력은 음수입니다 ...
이것은 버그입니까? 데이터 유형 문제?
정수 오버플로가있는 것 같습니다. Python 자체에서 정수는 임의 정밀도를 가질 수 있지만 pandas / numpy는 기본적으로 C 데이터 유형을 사용하므로 오버플로가 발생할 수 있습니다.
이 문제를 해결하기 위해 데이터를 Python 정수로 수동 캐스트 할 수 있습니다.
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq).astype('int') # Casting to Python integer type
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
이것은 내 테스트에서 오버플로 문제를 해결합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다