我试图在某种情况下更改数组中的值。
例如,当vlaues只高于10时,我想添加30。
所以,我尝试了如下:
x = np.arange(15)
x[x>10] = x + 30
我显示“ValueError:NumPy布尔数组索引赋值不能将15个输入值分配给掩码为真的4个输出值”。
另外我尝试了if else和np.where方法,但它们也不起作用。它们似乎只有在替换数量是一个特定值(如30)时才有效,而不是等式为x + 30。
任何想法或帮助都会非常感激。
谢谢,
艾萨克
答案 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