我有一个很大的矩阵,其中有很多元素非常小,我认为这些元素为0。在Mathematica中,有一个函数叫做Chop
:
Chop[expr]
用expr
精确的整数0 替换接近零的近似实数。细节
Chop[expr,delta]
替换绝对幅度小于delta
0的数字。Chop
使用默认公差10 -10。
因此,我想问一下在Python中是否有类似这样的函数。
没有内置功能,但是您可以自己创建一个:
def chop(expr, *, max=0.3):
return [i if i > max else 0 for i in expr]
Run Code Online (Sandbox Code Playgroud)
调用此方法会将所有小于或等于0.3
a的数字转换为0
:
>>> chop([1.0, 0.2, 0.4, 0.3, 0.31])
[1.0, 0, 0.4, 0, 0.31]
Run Code Online (Sandbox Code Playgroud)
您应该将默认值更改为max
更适合您的需求的值,但是对于任何单独的调用,您也可以随时单独更改它:
>>> chop([0.2, 0.3, 0.4], max=0.25)
[0, 0.3, 0.4]
>>> chop([0.3, 1, 2, 3], max=2)
[0, 0, 0, 3]
Run Code Online (Sandbox Code Playgroud)
如果需要,您也可以转换负数!对正数和负数都使用从零开始的相同距离:
def chop(expr, *, max=0.3):
return [i if abs(i) > max else 0 for i in expr]
Run Code Online (Sandbox Code Playgroud)
或通过使用两个不同的限制:
def chop(expr, *, max=0.3, min=-0.3):
if max < min:
raise ValueError
return [
i if i > max or i < min else 0
for i in expr
]
Run Code Online (Sandbox Code Playgroud)