【发布时间】:2019-09-25 09:24:56
【问题描述】:
我正在审查带有 numpy 数组的运算符,我发现了一些我没有预料到并且我不知道如何解释的东西。
我正在执行的操作是数组 A 的数组 B 的幂,显然 A 和 B 具有相同的形状。我期待的行为是“元素级幂”:A 中的每个元素都与 B 中相应元素的幂次之比。但是,似乎还有其他事情正在发生。
import numpy as np
values = list(range(1, 10))
array_1d = np.array(values)
print(array_1d ** (array_1d * 5))
所以我将[1, 2, 3, 4, 5, 6, 7, 9] 设为[5, 10, 15, 20, ...] 的幂。
预期的结果(在我的脑海中)相当于[v ** (v*5) for v in list(range(1,10))],即:
[1,
1024,
14348907,
1099511627776,
298023223876953125,
221073919720733357899776,
378818692265664781682717625943,
1329227995784915872903807060280344576,
8727963568087712425891397479476727340041449].
但是输出是:
array([ 1, 1024, 14348907, 0, 167814181, 1073741824, 613813847, 0, -1054898967], dtype=int32)
有人知道这个结果的原因吗?这里到底发生了什么? 谢谢!
【问题讨论】:
-
numpy中的int32数据类型在 -2147483648 到 2147483647 的范围内。大于此的数字会导致溢出。对于numpy中的最大数字,请使用array_1d = np.array(values, dtype=float)
标签: python arrays numpy matrix