在Sage中,輸入由Sage preparser預先準備好。
我將使用12而不是128,因此這些示例適合於一行。
當您輸入以下內容:
sage: import numpy
sage: perm = numpy.random.permutation(12)
你得到的錯誤信息是這樣的:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-38b6a5e3e889> in <module>()
----> 1 perm = numpy.random.permutation(Integer(12))
/opt/sage/local/lib/python2.7/site-packages/numpy/random/mtrand.so in mtrand.RandomState.permutation (numpy/random/mtrand/mtrand.c:21297)()
/opt/sage/local/lib/python2.7/site-packages/numpy/random/mtrand.so in mtrand.RandomState.shuffle (numpy/random/mtrand/mtrand.c:20965)()
TypeError: len() of unsized object
,你特別看行:
----> 1 perm = numpy.random.permutation(Integer(12))
告訴你您的輸入
perm = numpy.random.permutation(12)
被preparsed到
perm = numpy.random.permutation(Integer(12))
然而numpy的不是那麼高興被送入一個聖人整數, 它寧願一個Python int類型。
輸入原始的Python整數追加r
它最簡單的方法:
sage: perm = numpy.random.permutation(12r)
這會爲你工作:
sage: perm = numpy.random.permutation(12r)
sage: perm # random
array([ 9, 0, 11, 4, 2, 10, 3, 5, 7, 6, 1, 8])
另一種方式是讓賢者改造的Python INT到一個Sage Integer,但隨後強制它將其轉換回Python整數:
sage: perm = numpy.random.permutation(int(12))
sage: perm # random
array([ 5, 9, 1, 7, 0, 2, 10, 6, 3, 8, 4, 11])
你可以做的另一件事是關閉Sage preparser。
sage: preparser(False)
sage: perm = numpy.random.permutation(12)
sage: perm # random
array([ 0, 2, 7, 5, 8, 11, 1, 6, 9, 10, 3, 4])
你使用的是什麼版本的numpy?我使用1.9.1,你的代碼對我來說工作得很好。 – Carsten 2015-02-10 08:21:23
1.8.1。這是這個問題的原因嗎? – user98643 2015-02-10 08:25:41
顯然不是。 「permutation」功能的代碼從版本1.8.1到版本1.9.1保持不變。 – Carsten 2015-02-10 08:29:02