2 回答
TA贡献1803条经验 获得超6个赞
在幕后,python 将 float(r)**p 转换为返回“复杂”类型。
numpy power 函数旨在与 numpy array_like 结构一起使用,其中所有项目的大小相同并存储在连续的内存块中,其返回类型是从其参数推断出来的。
如果您期望复数,最好的方法是使用 complex64 或 complex128 类型。这些需要更多内存,因为每个复杂类型都由实部和虚部组成。所以 complex64 将由两个 float32 数字组成,complex128 将由两个 float64 数字组成。
>>> import numpy as np
>>> r = np.complex128(-12025.433836763057)
>>> p = 0.74
>>> np.power(r, p)
(-715.6124638577835+762.0498735968736j)
您也可以直接在幂函数中进行转换:
>>> import numpy as np
>>> r = np.float64(-12025.433836763057)
>>> p = 0.74
>>> np.power(r.astype(np.complex128), p)
(-715.6124638577835+762.0498735968736j)
但最简单的方法可能是仅更改幂函数的返回类型以期望一个复数:
>>> import numpy as np
>>> r = np.float64(-12025.433836763057)
>>> p = 0.74
>>> np.power(r, p, dtype=np.complex128)
(-715.6124638577835+762.0498735968736j)
有趣的是,numpy 通常允许将类型从 float64 转换为 complex,只要它们保持相同的精度水平。但是,即使 cast='same_kind' kwarg 被覆盖,它似乎也不允许隐式转换任何 ufunc 函数返回类型。
>>> np.can_cast(np.float64, complex)
True
>>> np.can_cast(np.float64, np.complex64)
False
>>> np.can_cast(np.float64, np.complex128)
True
根据文档,如果将标量参数传递给 ufunc(而不是数组),它会使用 np.result_type 和 np.promote_types 中的逻辑来确定 ufunc 的返回类型。
https://docs.scipy.org/doc/numpy/reference/ufuncs.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.result_type.html#numpy.result_type
>>> np.result_type(r, p)
dtype('float64')
TA贡献1824条经验 获得超5个赞
这numpy.float64
可能在引擎盖下由强类型的 C 语言数据结构表示。pythonfloat
是pythonic,因此可以很好地处理python 提供的复数处理。
请参阅:https ://docs.scipy.org/doc/numpy/reference/c-api.dtype.html
添加回答
举报