我正在模拟Riemann theta函数:
import numpy as np
def theta(s, n=100):
a_range = np.arange(2, n + 1)
return 1 + sum(1/(a_range ** s))
Run Code Online (Sandbox Code Playgroud)
它不适用于否定s; 例如theta(-2)导致此错误:
1 def theta(s, n=100):
2 a_range = np.arange(1)
----> 3 return 1 + sum(1/(a_range ** s))
4
5 theta(-2)
ValueError: Integers to negative integer powers are not allowed.
Run Code Online (Sandbox Code Playgroud)
为什么?x^-1应该只是1/x如果我正确地回忆起我的数学.
我最近询问了创建 10 的幂的最快方法,结果发现最快的方法实际上是一种偷偷摸摸的解决方法,您首先创建所有可能的值,然后在需要时简单地查找它们。
在解决方案中,alist被用作查找表,但是,我刚刚了解到,在查找操作方面dicts 应该要快得多(另请参见此处)。但是当我尝试使用 adict作为查找表时,过程实际上更慢:
n = 200
18 ns 18 ns 18 ns f[n] # list
22 ns 22 ns 22 ns g[n] # dict
n = -200
18 ns 18 ns 18 ns f[n] # list
29 ns 29 ns 29 ns g[n] # dict
Run Code Online (Sandbox Code Playgroud)
这是为什么?这是否与它们是keys整数而不是字符串有关?(而且我猜sets在这种情况下不能使用?)
这是我运行的代码:
from timeit import repeat
solutions = [
'f[n] # list',
'g[n] # dict', …Run Code Online (Sandbox Code Playgroud)