python在Mathematica中是否具有类似“ Chop”的功能?

Joe*_*mes 4 python python-3.x

我有一个很大的矩阵,其中有很多元素非常小,我认为这些元素为0。在Mathematica中,有一个函数叫做Chop

Chop[expr]expr精确的整数0 替换接近零的近似实数。

细节

  • Chop[expr,delta]替换绝对幅度小于 delta0的数字。
  • Chop使用默认公差10 -10

因此,我想问一下在Python中是否有类似这样的函数。

Mar*_*nen 5

没有内置功能,但是您可以自己创建一个:

def chop(expr, *, max=0.3):
    return [i if i > max else 0 for i in expr]
Run Code Online (Sandbox Code Playgroud)

调用此方法会将所有小于或等于0.3a的数字转换为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)

  • 您的函数执行相反的操作,它们替换为远离零的 0 个元素。此外,它们适用于标量值,而 OP 要求一个以矩阵作为输入的函数。 (2认同)