gpt4 book ai didi

python - 使用 numpy 将非常小的值取为实际的 0 时,如何优雅地设置精度/容差?

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:51 24 4
gpt4 key购买 nike

我想让 numpy 将小值取为 0,而无需自己对每个结果显式执行此操作。

有没有一种干净的方法可以做到这一点,而无需调用很酷的函数,如numpy.isclose或将其设置为零:c[c<1e-20]=0或任何其他类似的方法。在整个 session 中这样做的最干净的原因是什么(就像帖子底部的 matlab 行为一样干净)?

import numpy as np
a=np.random.randn(3,3)
b=np.random.randn(3,3)
a[1,:]=1e-20
c=np.matmul(a,b)
c[c<1e-20]=0

这给出:

>> c
array([[ 4.16639233e-01, 0.00000000e+00, 1.23275238e+00],
[ 1.59739149e-20, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 7.97659305e-01, 1.14217399e-01]])

与 matlab 比较:

>> format long
>> a=randn(3,3);
>> b=randn(3,3);
>> a(1,:)=1e-20;
>> a*b

ans =

0.000000000000000 0.000000000000000 0.000000000000000
-0.123562969836108 -0.148234256997880 4.136510695446545
0.596809154812933 1.837267263414820 -2.998336234205494

最佳答案

使用np.set_printoptions(suppress=True)。有关文档,请参阅 this

import numpy as np
np.set_printoptions(suppress=True)
a=np.random.randn(3,3)
b=np.random.randn(3,3)
a[1,:]=1e-20
c=np.matmul(a,b)

print(c)

输出:

array([[ 0.        ,  0.31346501,  0.        ],
[ 0. , 0. , 0. ],
[ 0.81057613, 1.916861 , 0. ]])

关于python - 使用 numpy 将非常小的值取为实际的 0 时,如何优雅地设置精度/容差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49249348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com