对NumPy数组取分数次幂产生NaN的原因是什么?
问题根因
- 你的数组
k后半段包含大量负实数,而在实数运算规则下,负实数的非整数次幂没有对应实数值,numpy对实数类型数组执行这类运算时会直接返回NaN。 - 你构造数组时用到的
np.r_[0:N / 2, 0, -N / 2 + 1:0]片段中,-N / 2 + 1:0生成的是连续负整数,乘以系数后依然为负,这部分就是NaN的来源。
已尝试方法无效的原因
np.power和**运算符的底层逻辑完全一致,对实数数组的负底数非整数次幂运算,默认不会自动切换到复数域计算。scipy.linalg.fractional_matrix_power是用于矩阵整体的分数次幂运算工具,不支持逐元素的标量幂运算,属于场景误用。
解决方案
根据你的实际需求二选一即可:
- 需要保留复数运算结果:先将数组转换为复数类型再运算
kpower = k.astype(np.complex128) ** (3/2)
- 需要得到对应实数值(保留原符号、仅对绝对值做幂运算:
kpower = np.sign(k) * (np.abs(k) ** (3/2))
内容的提问来源于stack exchange,提问作者Dimitri_896
相关产品推荐
相关产品推荐

