python中数组的条件修改

时间:2018-02-08 16:17:46

标签: python arrays numpy replace conditional-statements

我试图在某种情况下更改数组中的值。

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

所以,我尝试了如下:

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

我显示“ValueError:NumPy布尔数组索引赋值不能将15个输入值分配给掩码为真的4个输出值”。

另外我尝试了if else和np.where方法,但它们也不起作用。它们似乎只有在替换数量是一个特定值(如30)时才有效,而不是等式为x + 30。

任何想法或帮助都会非常感激。

谢谢,

艾萨克

3 个答案:

答案 0 :(得分:3)

您可以使用就地操作符+=轻松实现此目的:

x[x>10] += 30

答案 1 :(得分:1)

在赋值之前和之后子集数组,使它们具有相同的长度:

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])

答案 2 :(得分:1)

记住布尔数组也可以给出数值运算

x += (x > 10) * 30