除非数组中的数字与特定值匹配,否则如何将数字添加到数组

How to add numbers to an array except if the number in the array matches a certain value

我想将某个数字添加到我的数组值中,最大上限为 255,但仅限于数组中的数字与 0 不匹配的情况。

假设我要添加到数组中每个数字的值是 20,除非数字是 0

#The array to which I want to add a number based on value:
v=array([0,0,0,0,117,119,120,121,16,1,16,10,245,0,0,0,4,5])

value=20
lim = 255 - value 
v[v > lim] = 255
v[v <= lim] += value

#Results in the following array
array([20,20,20,20,137,139,140,141,36,21,36,30,255,20,20,20,24,25])

这行得通,但当数字为 0 时也会相加。但是,我想在其中添加一个语句,在所有情况下都加 20,除非数组中的数字为 0!预期结果:

array([0,0,0,0,137,139,140,141,36,21,36,30,255,0,0,0,24,25])

无法找到好的解决方案或弄清楚如何解决。

v[v <= lim] += value替换为v[(v != 0) & (v <= lim)] += value

使用这两行来实现您的预​​期输出

  • 所有非零值加 20 v[(v!=0)] += 20
  • 将值限制为 255 v[v > 255] = 255

完整代码:

v= np.array([0,0,0,0,117,119,120,121,16,1,16,10,245,0,0,0,4,5])
value=20
lim = 255
v[v!=0] += value
v[v>lim] = lim
print(v)
>> [  0   0   0   0 137 139 140 141  36  21  36  30 255   0   0   0  24  25]

我会按照以下方式进行:

import numpy as np
v = np.array([0,0,0,0,117,119,120,121,16,1,16,10,245,0,0,0,4,5])
value = 20
lim = 255
v += (v!=0)*value
v = np.clip(v, None, lim)
print(list(v))

产出

[0, 0, 0, 0, 137, 139, 140, 141, 36, 21, 36, 30, 255, 0, 0, 0, 24, 25]

说明:我将非零的布尔数组视为 0s 和 1s 的数组,因此乘以 value 我得到了要添加的值每个元素,然后我使用 numpy.clip 替换超出 lim.

的值