【发布时间】:2020-09-07 12:36:13
【问题描述】:
为什么** 对浮点数组和整数数组进行操作会有区别?
-
**在整数数组和浮点数组上的作用有何不同? - 这是某种机器精度的舍入问题吗?
- 为什么它只是一个数组的问题,而不是当我输入它时?
MWE:为什么f(ns) 不等于f(fs)
import numpy as np
def f(x):
a = +x**5
b = +x**6
return a-b
ns = np.array([60]) #integers
fs = np.array([60.]) #floats
print(ns)
print(fs)
print(f(ns))
print(f(fs))
print(int(60)**5- int(60)**6)
print(60.**5 - 60.**6)
导致
[60]
[60.]
[1366240256]
[-4.58784e+10]
-45878400000
-45878400000.0
【问题讨论】:
-
确切的数据类型是什么?
-
假设您在 Windows 或其他默认整数大小为 32 位的平台上运行。仔细查看
np.array([60])**6。整数计算溢出最大 32 位整数并“环绕”为负值。 (在默认整数为 64 位的平台上,任何人都可以通过np.array([60], dtype=np.int32)**6看到效果。) -
print(f(ns))在我的 64 位 linux 系统上提供[-45878400000]。
标签: python arrays numpy precision exponentiation