numpy.random.permutation 未确定大小的对象错误?
Unsized object error with numpy.random.permutation?
我现在有一些代码卡在一行中:
perm = numpy.random.permutation(128)
它给出了以下错误:"TypeError: len() of unsized object."我无法弄清楚问题是什么,因为 128 只是一个整数。我看到这个问题之前可能已经解决了:http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025592.html 但他们的解决方案对我没有帮助,因为它是关于浮点数的。
谁能看出这里出了什么问题?
在 Sage 中,输入由 Sage 预解析器进行预解析。
我将使用 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)
已准备好
perm = numpy.random.permutation(Integer(12))
但是 numpy 不太高兴被喂食 Sage Integer,
它更喜欢 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])
另一种方法是让 Sage 将 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 预解析器。
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])
我现在有一些代码卡在一行中:
perm = numpy.random.permutation(128)
它给出了以下错误:"TypeError: len() of unsized object."我无法弄清楚问题是什么,因为 128 只是一个整数。我看到这个问题之前可能已经解决了:http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025592.html 但他们的解决方案对我没有帮助,因为它是关于浮点数的。
谁能看出这里出了什么问题?
在 Sage 中,输入由 Sage 预解析器进行预解析。
我将使用 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)
已准备好
perm = numpy.random.permutation(Integer(12))
但是 numpy 不太高兴被喂食 Sage Integer, 它更喜欢 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])
另一种方法是让 Sage 将 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 预解析器。
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])