代码之家  ›  专栏  ›  技术社区  ›  Isaac

python中数组的条件修改

  •  0
  • Isaac  · 技术社区  · 7 年前

    当数组处于某种状态时,我尝试更改数组中的值。

    例如,当vlaues仅高于10时,我想加30。

    因此,我尝试了以下方法:

    x = np.arange(15)
    x[x>10] = x + 30
    

    我显示了“ValueError:NumPy布尔数组索引分配无法将15个输入值分配给掩码为true的4个输出值”。

    我还尝试了if-else和np。但这些方法也不起作用。它们似乎只有在替换数量为某个值(如30)时才起作用,而不是x+30的方程。

    任何想法或帮助都将不胜感激。

    非常感谢。

    艾萨克

    3 回复  |  直到 7 年前
        1
  •  3
  •   Graipher    7 年前

    可以使用在位操作符 += 要轻松实现这一点:

    x[x>10] += 30
    
        2
  •  1
  •   akuiper    7 年前

    在赋值前后对数组进行子集划分,使其具有相同的长度:

    x[x > 10] = x[x > 10] + 30
    x
    # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 41, 42, 43, 44])
    

    或使用 np.add.at :

    np.add.at(x, x > 10, 30)
    x
    # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 41, 42, 43, 44])
    

    使用 np.where ,您可以执行以下操作:

    np.where(x > 10, x + 30, x)
    # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 41, 42, 43, 44])
    
        3
  •  1
  •   FHTMitchell    7 年前

    记住,布尔数组也可以进行数值运算

    x += (x > 10) * 30