我想从numpy
数组中的每个元素中减去给定值。
例如,如果我有一个名为a_q
的numpy数组和名为subtract_me
的变量,那么我可以这样做:
result = np.subtract(a_q,subtract_me)
没关系。但是我不希望它只是盲目地从每个元素中减去。如果差异低于阈值,那么我不希望减法发生。相反,我希望数组的元素被该阈值替换。
最有效的方法是什么?我可以简单地遍历数组并从每个元素中减去并检查是否已达到阈值,并从结果中构建一个新数组(如下所示) - 但是有更好或更有效的方法做到了吗?
threshold = 3 # in my real program, the threshold is the
# lowest non-infinity number that python can handle
subtract_me = 6
a_q = []
for i in range(10):
val = i - subtract_me
if val < threshold:
val = threshold
a_q.append(val)
myarr = np.array(a_q)
print myarr
答案 0 :(得分:1)
对于NumPy数组,矢量化方法通常效率最高,所以这里的一种方法可能比一次迭代数组一个元素更有效:
>>> threshold = 3
>>> subtract_me = 6
>>> a_q = np.arange(10)
>>> arr = a_q - subtract_me # takeaway the subtract_me value
array([-6, -5, -4, -3, -2, -1, 0, 1, 2, 3])
>>> arr[arr - subtract_me < threshold] = threshold # replace any value less than threshold
array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3])
编辑:由于np.clip
在问题下面的评论中被提及,我可能会将其吸收到我的答案中以便完整; - )
以下是您可以使用它来获得所需结果的一种方式:
>>> np.clip((a_q - subtract_me), threshold, np.max(a_q))
array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3])