我不明白Python中**運算符的以下行爲的合理性。這返回一個float:爲什麼Python **運算符在數組和標量上行爲不同
>>> 10**-1
0.1
這將返回一個整數:
>>> y=np.array([10,10,10])
>>> y
array([10, 10, 10])
>>> y**-1
array([0, 0, 0])
爲什麼?
以下的工作,但上述似乎是非常錯誤的。
>>> y**-1.0
array([ 0.1, 0.1, 0.1])
我不明白Python中**運算符的以下行爲的合理性。這返回一個float:爲什麼Python **運算符在數組和標量上行爲不同
>>> 10**-1
0.1
這將返回一個整數:
>>> y=np.array([10,10,10])
>>> y
array([10, 10, 10])
>>> y**-1
array([0, 0, 0])
爲什麼?
以下的工作,但上述似乎是非常錯誤的。
>>> y**-1.0
array([ 0.1, 0.1, 0.1])
numpy implements its S.T. ANY數學涉及在一個int兩個int結果....至少多數民衆贊成在很大程度上是我的經驗
爲了提高效率,numpy的陣列被限制到指定的類型,例如與你:
>>> y=np.array([10,10,10])
>>> y.dtype
dtype('int64')
因爲int不能表示小數部分,所以它被丟棄。如果使用浮點陣列這樣,結果是您所預期的:
>>> y=np.array([10,10,10], dtype='float32')
>>> y.dtype
dtype('float32')
>>> y**-1
array([ 0.1, 0.1, 0.1], dtype=float32)
另外,如果你通過在列表中最初包含float
類型的dtype
將默認爲float64
:
>>> y=np.array([10.0 ,10.0 ,10.0])
>>> y.dtype
dtype('float64')
>>> y**-1
array([ 0.1, 0.1, 0.1])
因爲numpy數組重載'__pow__'特殊方法? – 2013-04-04 20:27:44
爲什麼它會是「非常錯誤」?除非你正在做一些不尋常的事情,你需要區分正負浮點數零,看起來無論你是FP還是整數都無關緊要。 – millimoose 2013-04-04 20:30:47
當我說「非常錯誤」時,我的意思是它似乎違反了我認爲是一個基本原則:可以像標量一樣對數組進行操作並獲得一致的結果。 – Wonder 2013-04-04 20:40:49