2016-11-13 2 views
2

크기 4의 랜덤 순열을 생성하기위한 목적으로 두 줄의 코드이다 :호환성 여기

TypeError         Traceback (most recent call last) 
<ipython-input-3-033ef4665637> in <module>() 
     1 from numpy import random 
----> 2 t = random.permutation(Integer(4)) 

mtrand.pyx in mtrand.RandomState.permutation (numpy/random/mtrand/mtrand.c:34842)() 

mtrand.pyx in mtrand.RandomState.shuffle (numpy/random/mtrand/mtrand.c:33796)() 

TypeError: len() of unsized object 

왜?

조금 더 자세히 : 나는 파이썬 3에서 코드를 실행했고, mtrand도 파이썬 3 디렉토리에 있으며, 이는 sage가 numpy의 Python 2 버전을 호출 할 가능성을 배제해야한다.

+0

그럼에도 불구하고 현재 사용중인 Sage는 Python 2 만 지원합니다 (가까운 장래에 변경 될 예정이지만 https://trac.sagemath.org/ticket/15530 참조). – kcrisman

답변

1

세이지에서 작동하지 않는 이유는 세이지가 입력을 준비하여 파이썬 int에서 "Sage Integer"으로 "4"가되었다는 것입니다.

from numpy import random 
t = random.permutation(int(4)) 

을 아니면 preparser을 해제 할 수 있습니다 : 세이지,이 작동합니다

preparser(False) 
t = random.permutation(4) 
2

이 현자의 preparser을 탈출하기 위해, 당신은 또한 편지 r를 추가 할 수 있습니다 숫자 입력 (은 "원시") . int(4)가 너무 것을 파이썬 정수가 세이 정수로 변환된다 int(Integer(4))로 preparsed하고 다시 파이썬 정수로 변환하는 동안

from numpy import random 
t = random.permutation(4r) 

int(4) 위에 4r의 장점은, 4r는 preparser을 무시한다는 것이다.

마찬가지로 1.5r은 세이지 "실수"가 아닌 순수한 파이썬 부동 소수점 숫자를 제공합니다.