内置电源功能和np.power都不起作用

时间:2015-02-26 15:07:57

标签: python numpy

我有以下简单的两件事:

n = 2.01
array = np.array([-0.3700708 , -0.41282227, -0.25959961])

现在我想要将每个数组元素提升到(n-1.)的幂。所以我尝试了以下内容:

>>> array**(n-1.)
array([ nan,  nan,  nan])
>>> np.power(array, (n-1.))
array([ nan,  nan,  nan])

如果我取出每个元素并将其提升到(n-1.)的力量,它就可以正常工作。哪里出错?

3 个答案:

答案 0 :(得分:3)

原因是结果是复杂值,例如

  -0.3700708 ** 1.01 == -0.366229 - 0.011509i

编辑:计算 Wolfram Alpha 时的值(将负值提升为幂)

  (-0.3700708) ** 1.01

而不是(先上台,然后否定)

  -0.3700708 ** 1.01

答案 1 :(得分:3)

解决方法 - 将array转换为复杂

In [83]: (array+0j)**(n-1)  # or array.astype('complex')
Out[83]: 
array([-0.36622949-0.01150923j, -0.40898407-0.01285284j,
       -0.25599573-0.00804499j])

显然**响应数组的dtype,当dtype很复杂时产生复数值,但是当它浮动时会失败。可能会在C代码中找到详细信息。

答案 2 :(得分:2)

您可以简单地从复杂的数据类型开始:

ar = np.array([-0.3700708 , -0.41282227, -0.25959961], dtype=np.complex)
>>> np.power(ar, 2.01)
array([ 0.13553084+0.00425923j,  0.16883773+0.00530594j,
        0.06645639+0.00208848j])

这会给你复杂的结果。 例如,然后取绝对值:

>>> np.abs(np.power(ar, 2.01))
array([ 0.13559775,  0.16892109,  0.0664892 ])

或选择真实的部分:

>>> np.real(np.power(ar, 2.01))
array([ 0.13553084,  0.16883773,  0.06645639])