我想从列表中替换大纲视图。因此我定义了一个上下界。现在,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)
您可以使用
numpy.clip
:对于不依赖
numpy
的替代方案,您可以一直这样做如果您只想设置一个上限,当然可以写
arr = [min(x, upper_bound) for x in arr]
。或者类似地,如果您只需要一个下界,您可以使用max
。在这里,我已经应用了两个操作,一起编写。在
编辑:这里有一个稍微更深入的解释:
给定数组的元素
x
(假设你的upper_bound
至少和你的lower_bound
一样大!),您将有三种情况之一:i)
x < lower_bound
ii)
x > upper_bound
iii)
lower_bound <= x <= upper_bound
。在在case(i)中,
max/min
表达式首先计算为max(lower_bound, x)
,然后解析为lower_bound
。在在情况(ii)中,表达式首先变成}。在
max(lower_bound, upper_bound)
,然后变成{在案例(iii)中,我们得到
max(lower_bound, x)
,它解析为x
。在在这三种情况下,输出都是我们想要的。在
相关问题 更多 >
编程相关推荐