2017-04-07 65 views
2

我建模黎曼θ函數:爲什麼我不能在numpy中提升爲負值?

import numpy as np 
def theta(s, n=100): 
    a_range = np.arange(2, n + 1) 
    return 1 + sum(1/(a_range ** s)) 

它不爲負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. 

這是爲什麼?如果我正確記得我的數學,x^-1應該只是1/x

+3

因爲,錯誤消息明確地說:「整數負整數次冪是不允許的。 「,爲什麼不試試:'a_range = np.arange(2,n + 1,dtype = np.float)'? – Evert

+0

或者只是'a_range = np.arange(1.0)'就足夠了。 –

+0

就是這樣!謝謝。 – shredding

回答

6

在NumPy中,像a_range ** s這樣的操作的輸出dtype完全由輸入的dtypes決定,而不是值。這意味着將整數提升到整數冪必須總是給整數,或者總是給浮點數。

重要的是像numpy.array([2]) ** numpy.array([2])這樣的東西給整數輸出,所以這意味着numpy.array([2]) ** numpy.array([-2])必須給整數或什麼都不要。他們什麼也沒選。將整數提升爲負整數是NumPy中的錯誤。

如果你想浮點輸出,使浮點輸入:

a_range = np.arange(2, n + 1, dtype=float) 

a_range = np.arange(2, n + 1).astype(float) 
相關問題