我想numpy将小值取为0,而不是自己明确地为每个结果做。
有没有一种干净的方法可以在不调用numpy.isclose
冷却功能或将其设置为零的情况下执行此操作:c[c<1e-20]=0
或任何其他类似的方法。什么是最干净的为什么要在整个会话中做到这一点(像帖子底部的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
答案 0 :(得分:1)
使用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. ]])