我有一个很大的矩阵,有很多非常小的元素,我认为这些元素是0。在mathematica中,有一个名为Chop的函数:
Chop[expr]取代接近于expr的近似实数。
0乘以精确的整数0。
详情
取代绝对大小小于-cc> 0的数。
Chop[expr,delta]使用10-10的默认容差。
因此,我想问一下python中是否有这样的函数。

最佳答案

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

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

调用此命令会将小于或等于0.3的所有数字转换为0:
>>> chop([1.0, 0.2, 0.4, 0.3, 0.31])
[1.0, 0, 0.4, 0, 0.31]

您应该将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]

如果你愿意,你也可以转换负数!对于正数和负数,从零开始使用相同的距离:
def chop(expr, *, max=0.3):
    return [i if abs(i) > max else 0 for i in expr]

或者使用两种不同的限制:
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
    ]

关于python - python在Mathematica中是否具有类似“Chop”的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43751591/

10-11 06:57