我有以下简单的两件事:
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.)
的力量,它就可以正常工作。哪里出错?
答案 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])