【发布时间】:2020-06-30 19:25:46
【问题描述】:
我有一个 numpy 复数数组,需要创建一个包含四舍五入实部和虚部的新数组,其中一半的舍入要么接近零,要么远离零。
在stackoverflow 上有几项使用decimal 包的建议,允许指定不同类型的舍入。对于复数数组x,以下代码可以工作,但速度很慢:
rounded_array = np.array([
float(Decimal(x.real).quantize(0, rounding=ROUND_HALF_DOWN)) + 1j * \
float(Decimal(x.imag).quantize(0, rounding=ROUND_HALF_DOWNs)) for x in arr])
有哪些简单但更快的替代方法?
ROUND_HALF_UP 和 ROUND_HALF_DOWN 的确切含义如下所示:https://docs.python.org/3/library/decimal.html#decimal.ROUND_HALF_UP。
非常清楚,对于从零舍入或向零舍入,例如复数的实部,我寻求(注意两半的差异)
toward zero(ROUND_HALF_DOWN) away from zero (ROUND_HALF_UP)
-4.00 -4.0 -4.0
-3.75 -4.0 -4.0
-3.50 -3.0 -4.0
-3.25 -3.0 -3.0
-3.00 -3.0 -3.0
-2.75 -3.0 -3.0
-2.50 -2.0 -3.0
-2.25 -2.0 -2.0
-2.00 -2.0 -2.0
-1.75 -2.0 -2.0
-1.50 -1.0 -2.0
-1.25 -1.0 -1.0
-1.00 -1.0 -1.0
-0.75 -1.0 -1.0
-0.50 -0.0 -1.0
-0.25 -0.0 -0.0
0.00 0.0 0.0
0.25 0.0 0.0
0.50 0.0 1.0
0.75 1.0 1.0
1.00 1.0 1.0
1.25 1.0 1.0
1.50 1.0 2.0
1.75 2.0 2.0
2.00 2.0 2.0
2.25 2.0 2.0
2.50 2.0 3.0
2.75 3.0 3.0
3.00 3.0 3.0
3.25 3.0 3.0
3.50 3.0 4.0
3.75 4.0 4.0
4.00 4.0 4.0
How to always round up a XX.5 in numpy 的公认解决方案既慢又不提供我感兴趣的舍入类型。
【问题讨论】:
-
加/减一半并截断
-
np.fix、np.ceil和np.floor是否有理由不满足您的需求? -
“请留下评论而不是投票来结束这个问题”不是一个好写的东西。这意味着您知道您的问题有问题。请写一个问题,其质量排除了此类免责声明的必要性,否则您可能会被关闭。
-
@MadPhysicist 我相信以前的版本已关闭,因为有些人不理解这个问题。如果不清楚,我打算有机会首先澄清问题。
-
@rhz。我强烈建议您删除免责声明并确保您遵守网站规则。请记住,人们在这里免费帮助您。你的工作是提出正确的问题,而不是指导他们投票或结束。