【问题标题】:How to add numbers to an array except if the number in the array matches a certain value除非数组中的数字与某个值匹配,否则如何将数字添加到数组中
【发布时间】:2021-08-28 09:14:58
【问题描述】:

我想为我的数组的值添加一个特定的数字,最大上限为 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])

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

【问题讨论】:

    标签: python arrays list numpy list-comprehension


    【解决方案1】:

    v[v &lt;= lim] += value 替换为v[(v != 0) &amp; (v &lt;= lim)] += value

    【讨论】:

    • 谢谢!作为一种魅力:)
    【解决方案2】:

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

    • 在所有非零值上加 20 v[(v!=0)] += 20
    • 将值限制为 255 v[v &gt; 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]
    

    【讨论】:

    • 您提高了整个解决方案的效率。谢谢
    【解决方案3】:

    我会这样做:

    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,我得到每个元素要添加的值,然后我使用@987654321 @ 替换 lim 之外的值。

    【讨论】:

    • 一个非常有创意的解决方案,我永远不会想到!
    猜你喜欢
    • 2021-08-04
    • 2021-07-12
    • 1970-01-01
    • 2016-04-20
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多