sage和numpy之间的兼容性

时间:2016-11-13 20:59:35

标签: python numpy sage

以下是两行代码,用于生成大小为4的随机排列:

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

这可以在Python中执行,但不能在sage中执行,这会产生以下错误:

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

为什么?

更多细节:我在Python 3中执行了代码,mtrand也在Python 3目录中,这应该排除sage调用numpy的Python 2版本的可能性。

2 个答案:

答案 0 :(得分:3)

要逃避Sage的preparser,您还可以将字母public function getUserTimeline() { $client = new \GuzzleHttp\Client(); $token = "user_id-token"; $secret = "user_secret"; $request = $client->get('https://api.twitter.com/1.1/statuses/user_timeline.json?', [ 'query' => [ 'consumer_key' => env('TWITTER_CLIENT_ID'), 'consumer_secret' => env('TWITTER_SECRET'), 'screen_name' => "a_screen_name", 'token' => $token, 'token_secret' => $secret, 'count'=>'2' ]] )); dd(json_decode($request->getBody())); } (对于“raw”)附加到数字输入。

r

from numpy import random t = random.permutation(4r) 优于4r的优势在于int(4)绕过了4r 预先准备者,而int(4)被预先准备为int(Integer(4)) 然后将Python整数转换为Sage整数 转换回Python整数。

以同样的方式,1.5r会给你一个纯Python的浮点而不是 一个圣人“真实的数字”。

答案 1 :(得分:2)

这在Sage中不起作用的原因是Sage准备了它的输入,将“4”从Python int变为Sage Integer。在Sage中,这将起作用:

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

或者您可以关闭预分析器:

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