除非数组中的数字与特定值匹配,否则如何将数字添加到数组
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]
说明:我将非零的布尔数组视为 0
s 和 1
s 的数组,因此乘以 value
我得到了要添加的值每个元素,然后我使用 numpy.clip 替换超出 lim
.
的值
我想将某个数字添加到我的数组值中,最大上限为 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]
说明:我将非零的布尔数组视为 0
s 和 1
s 的数组,因此乘以 value
我得到了要添加的值每个元素,然后我使用 numpy.clip 替换超出 lim
.