如何解决为什么“ np.inf // 2”会导致NaN而不是无穷大? Binary arithmetic operations
我对np.inf // 2
的求值为np.nan
而不是np.inf
感到失望,这与常规除法一样。
我为什么错过了nan
比inf
更好的选择的原因?
解决方法
我将成为just points at the C level实现者,而不会试图解释其意图或理由:
*mod = fmod(vx,wx);
div = (vx - *mod) / wx;
看起来要计算浮点数的divmod
(刚好在do floor division时会被调用),它首先计算模数,而float('inf') %2
才是{{1} },因此当它计算NaN
时会以vx - mod
结尾,因此一切都会以其他方式传播。
因此,简而言之,由于地板除法的实现在计算中使用了模数,即NaN
,所以地板除法的结果也以NaN
结束
底除法是相对于模定义的,两者均构成divmod操作的一部分。
Binary arithmetic operations
楼层划分和模运算符通过以下方式连接 身份:
x == (x//y)*y + (x%y)
。地板除法和模也 与内置函数divmod()连接:divmod(x,y) == (x//y,x%y)
。
此等价不适用于x = inf
—其余inf % y
未定义—使inf // y
模棱两可。这意味着nan
的结果至少与inf
一样好。为简单起见,CPython actually only implements divmod and derives both // and % by dropping a part of the result —这意味着//
从divmod继承了nan
。
无穷大不是数字。例如,您can't even say无限-无限为零。因此,您将遇到这样的限制,因为NumPy是一个数值数学包。我建议使用像SymPy这样的符号数学包,它可以使用无穷大来处理许多不同的表达式:
serverRequest.bodyToMono(String.class)
.doOnNext(validator::validateRequestString)
.bodyToMono(MyRequestBody.class)
.map(request -> proceed())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。