python - numpy.power 用于负数数组

标签 python numpy rounding

我有一个 numpy 数组 arr = np.array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]) .
那么我怎样才能将每个元素提高到(比如说)3/5 次方呢?

当我尝试这样的事情时:

>>> np.float_power(arr, 3/5)
>>> arr**(3/5)

我总是得到这个输出:

array([       nan,        nan,        nan,        nan,        nan,
   0.        , 1.        , 1.16150873, 1.26782173, 1.34910253,
   1.4157205 ])

但是,x**(3/5) 应该可以计算负数 x,因为它只是 x 的五次方根立方体!
我认为这是因为 Python 并不将 3/5 视为“完美分数”3/5,而是将其视为(非常)接近 0.6 的实数(例如 0.59999999999999999)。

如何解决这个问题?

最佳答案

您应该取下标志并稍后重新插入:

res = np.float_power(abs(arr), 3./5)*np.sign(arr)

[-2.6265278  -2.29739671 -1.93318204 -1.51571657 -1.  0. 1. 1.51571657  1.93318204  2.29739671  2.6265278 ]

nth root algorithm仅返回正值。我认为 numpy 中的实现是类似的。

关于python - numpy.power 用于负数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55619592/

相关文章:

python-3.x - 使用 Matplotlib 绘制二进制 Numpy 数组的边界

java - 如何从 int 数组向下舍入到最接近的整数?

Javascript - 从字符串中删除前导零

python - 从 Python C API 中的子类型向 tp_new 和 tp_init 传递参数

python - 旋转 Pandas 数据框以查看是否满足条件

python - 在 appengine 中通过代码处理 404 抛出

python - pandas 系列中重复的 NaN 集合

python - 如何在这些向量之间插入每2个向量的和?

python - 在 Python 3 中尾随小数点 >= 0.5 时,math.ceil() 和 round() 之间的算法有什么区别?

java - Java 中的四舍五入小数