【发布时间】:2017-05-10 19:50:32
【问题描述】:
我想替换列表中的大纲。因此我定义了一个上限和下限。现在upper_bound 以上和lower_bound 以下的每个值都替换为绑定值。我的方法是使用 numpy 数组分两步执行此操作。
现在我想知道是否可以一步完成,因为我想它可以提高性能和可读性。
有没有更短的方法可以做到这一点?
import numpy as np
lowerBound, upperBound = 3, 7
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[arr > upperBound] = upperBound
arr[arr < lowerBound] = lowerBound
# [3 3 3 3 4 5 6 7 7 7]
print(arr)
【问题讨论】:
-
虽然很高兴有一个已编译的
clip方法,但您的代码并没有什么不符合pythonic 的地方。这是对numpy的完美使用,并且具有可读性(对于有经验的用户)。把这个概念放在你的工具箱里;它适用于不太适合clip模型的情况。 -
这个操作一般叫做clamping,clipping或者阈值
-
您应该使用
clip方法,但除了速度之外还有另一个原因;您的代码很优雅,但使用arr > upperBound创建了一个中间数组,如果数组变大,这可能是一个问题。 -
@hpaulj 感谢您的评论。术语“pythonic”是指短而快。我知道我的解决方案不是非pythonic,但
clip()方法对于我的特殊用例来说已经足够了。步骤 1) 自己做 2) 理解概念和 3) 使用库是一个很好的方法:)
标签: python arrays numpy clip clamp