我有一个包含负值的数组,在 Python 中必须将其提升为小数幂。我需要获取运算生成的复数数组的实部。
MWE
from __future__ import division
import numpy as np
a = -10
b = 2.5
n = 0.88
x = np.arange(5, 11, 1)
y = (a / (x - b)) ** (1 / n)
我正在使用 Python v2.7.6。
最佳答案
问题是 NumPy 不会将 float 或整数数据类型提升为用于此计算的复杂数据类型。
您有一个 float 组基数和一个浮点指数,因此 NumPy 尝试使用“放入两个 float 据类型对象,取出一个 float 据类型对象”循环来计算结果。负值会触发警告并返回空值数组。
当操作数之一是数组时,**
最终使用与 np.power
相同的代码。您可以在下面看到所有可以使用的低级循环。请注意,您始终会返回一个与输入数据类型具有相同数据类型的对象:
>>> np.power.types
['bb->b', # char
'BB->B', # unsigned char
'hh->h', # short
...
'dd->d', # compatible Python float
'gg->g', # compatible: C long float
'FF->F',
'DD->D', # compatible: Python complex
'GG->G',
'OO->O']
我们希望计算以 'DD->D'
循环运行!
正如本页其他人所指出的那样,解决方案是确保底数或指数具有复杂的数据类型。这会强制 NumPy 将任何较小的数字 dtype 提升为复杂 dtype,并且计算使用“放入两个复杂 dtype 对象,取出一个复杂 dtype 对象”循环:
>>> a = -10 + 0j # ensures that a/(x - b) will have complex dtype
>>> ((a / (x - b)) ** (1 / n))
array([-4.39566725-2.00743397j, -2.99895689-1.36957772j,
-2.25394034-1.02934006j, -1.79435400-0.81945401j,
-1.48410349-0.67776735j, -1.26136729-0.57604714j])
如果您只想要真实的部分,请使用 ((a/(x - b)) ** (1/n)).real
。
关于python - 如何在 Python 中将具有负值的数组提升为小数幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898917/