python-3.x - 裁剪复数以解决 exp 中的溢出错误

标签 python-3.x numpy complex-numbers integer-overflow

我在 exp 中遇到运行时溢出错误,因为它超出了 64 位的限制,并且我无法使用 np.float128(),因为我使用的是 64 位 Windows 计算机。

我可以剪辑并使用它,但是如何剪辑一个复数并仍然获得虚数和复数部分。

当前代码:

import numpy as np
x = 738.368295193386-738.368295193386j
x = np.clip(x, -709.78, 709.78)
print(np.exp(x))

输出是这样的:

(1.7928227943945157e+308+0j)

但也希望虚数项有一个值。

例如:

np.exp(708.368295193386+708.368295193386j)

(-2.657182604727012e+306-4.3615140206566584e+307j)

如何通过保留值和符号 (+ -) 获得类似的结果?

最佳答案

虽然限制值的策略适用于实数,但对于复数来说却有缺陷。事实上,复指数在复空间中执行一种旋转(请参阅 similarity ),这会导致实部/虚部的符号仅发生很小的变化。幸运的是,您可以使用模数来减少虚部,并使用钳位来使实部饱和。该策略的数值稳定性明显更高。您还可以使用 np.realnp.imag 提取实部/虚部。这是一个例子:

x = np.fmod(np.imag(x), 2*np.pi)*1j + np.clip(np.real(x), -709.78, 709.78)

虚部位于]-2π;2π[范围内。它不能被钳位,因为它会强烈影响指数的结果(包括符号)。

如果这还不够,您可以计算实部的指数,然后使用 np.cosnp.sin 在复空间中自行旋转结果.

关于python-3.x - 裁剪复数以解决 exp 中的溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73704720/

相关文章:

python - 为什么对 bool 索引结构化数组的赋值取决于索引排序?

Python 多处理比单处理花费更长的时间

python - 将 numpy 字符串数组转换为日期时间

python - 如何获得复数论证与句点的角度?

c中的复数输入

python - 如何从嵌套字典返回最大值及其关联键

Python:没有依赖项的卡住选项?

python-3.x - eli5解释预测XGBoost模型

c++ - 如果输入图像矩阵实际上是复数类型,MATLAB imresize() 会做什么?

python - 使用 pyinstaller 和 scipy 模块将 py 文件转换为 exe 文件时出错。知道可能是什么问题吗?