2015-02-10 86 views
2

我有一些代碼,現在被卡住在一行:numpy.random.permutation未確定的對象錯誤?

perm = numpy.random.permutation(128) 

爲它提供以下錯誤:「類型錯誤:未施膠對象的LEN()。」我無法弄清楚問題是什麼,因爲128只是一個整數。我發現這是一個在此之前可能已經解決的問題:http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025592.html但他們的解決方案對我無用,因爲它是關於浮動的。

任何人都可以看到這裏出了什麼問題嗎?

+1

你使用的是什麼版本的numpy?我使用1.9.1,你的代碼對我來說工作得很好。 – Carsten 2015-02-10 08:21:23

+1

1.8.1。這是這個問題的原因嗎? – user98643 2015-02-10 08:25:41

+1

顯然不是。 「permutation」功能的代碼從版本1.8.1到版本1.9.1保持不變。 – Carsten 2015-02-10 08:29:02

回答

3

在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]) 
+1

另一種選擇是使用Ipython筆記本,或從系統的下拉菜單以「python」模式使用Sage筆記本。 – kcrisman 2015-02-10 16:15:33

相關問題