如何解决Python np.sqrt(x-a)*np.heaviside(x,a)
我正在尝试根据研究论文进行计算。在那个计算中,函数的值应该是
在我的模块中,x 和 a 是一维 numpy 数组(长度相同)。在我的第一次尝试中,我将该功能实现为
f = np.sqrt(x-a)*SOMETHING*np.heaviside(x,a)
但是对于 x0*NaN = NaN 中。
之后我也可以将结果数组中的所有 NaN 替换为 0,但这会导致来自 numpy.sqrt() 的警告输出用于我需要抑制的负值。另一种解决方案是通过添加 0j 并在之后取实部来将平方根的参数视为虚数:
f = np.real(np.sqrt(x-a+0j)*SOMETHING*np.heaviside(x,a))
但我觉得这两种解决方案都不是很优雅,而且第二种解决方案阅读起来也不必要地复杂。在 Python 中是否有更优雅的方法来执行此操作,而我在这里缺少?
解决方法
在这种情况下,您可以使用 np.maximum
作弊,以不计算负数的平方根。
此外,请注意 np.heaviside
不使用 a
作为阈值,而是使用 0(第二个参数在某些情况下是 heaviside 的输出)。您可以改用 np.where
。
这是一个例子:
f = np.where(x<a,np.sqrt(np.maximum(x-a,0))*SOMETHING)
请注意,在这种特定情况下,表达式可以简化,甚至不需要 np.where
(因为 np.sqrt(np.maximum(x-a,0))
给出 0)。因此,您可以简单地编写:
f = np.sqrt(np.maximum(x-a,0))*SOMETHING
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。