当我将负的numpy.float64
提升为指数时,我接收到一个nan
。为什么不支持复杂的数学?转换为float
的唯一解决方法是什么
>>> from numpy import float64, power
>>> r = float64(-12025.433836763057)
>>> p = 0.74
>>> r**p
nan
>>> power(r, p)
__main__:1: RuntimeWarning: invalid value encountered in power
nan
>>> float(r)**p
(-715.6124638577838+762.049873596874j)
>>>
建议的副本有一个类似的问题,答案是这是numpy
中的一个bug。这是路的尽头吗
numpy.float64
可能由强类型的C语言数据结构表示。pythonfloat
是pythonic的,因此可以很好地处理python提供的复数处理见:https://docs.scipy.org/doc/numpy/reference/c-api.dtype.html
在幕后,python正在转换浮点(r)**p以返回“复杂”类型
numpy幂函数用于处理类似numpy array_的结构,其中所有项大小相同,存储在连续的内存块中,其返回类型由其参数推断
如果需要复数,最好的方法是使用complex64或complex128类型。这些需要更多的内存,因为每个复杂类型都由实部和虚部组成。所以complex64将由两个float32数字组成,complex128将由两个float64数字组成
您也可以在幂函数中直接强制转换:
但最简单的方法可能只是改变幂函数的返回类型,以期望得到一个复数:
有趣的是,numpy通常允许从float64到复杂的类型转换,只要它们保持相同的精度水平。但是,即使casting='same_kind'kwarg被重写,它似乎也不允许隐式强制转换任何ufunc函数返回类型
根据文档,如果将标量参数传递给ufunc(与数组相反),它将使用np.result_类型和np.promote_类型中的逻辑来确定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
相关问题 更多 >
编程相关推荐