python - 如何在 Python 中将具有负值的数组提升为小数幂?

标签 python arrays numpy complex-numbers

我有一个包含负值的数组,在 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/

相关文章:

python - 使用python在linux中创建一个用户组

python - 使用 numpy.linalg.norm() 函数查找数组的最近点

python - Pandas 数据框中行的距离矩阵

c# - 将我填充的数组值显示到列表框中并可选择删除它们

c - 如何在 gtk+ 中创建按钮数组

arrays - 如何在配置单元中分配数组并查找数组的大小?

python - NumPy 数组不是 JSON 可序列化的

python - 如何从 Pandas DataFrame 中提取值,而不是 Series(不引用索引)?

python - Pyspark 中的 lambda 函数无法识别全局变量

python - pydev eclipse 上的 django 交互式 shell 出错