【问题标题】:Conditional modification of array in pythonpython中数组的条件修改
【发布时间】:2018-02-09 00:25:32
【问题描述】:

我试图在某个条件下更改数组中的值。

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

所以,我尝试如下:

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

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

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

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

谢谢,

艾萨克

【问题讨论】:

    标签: python arrays numpy replace conditional-statements


    【解决方案1】:

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

    x[x>10] += 30
    

    【讨论】:

    • 非常感谢 Graipher,
    【解决方案2】:

    在赋值前后对数组进行子集化,使它们具有相同的长度:

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

    【讨论】:

    • 非常感谢 Psidom。
    【解决方案3】:

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

    x += (x > 10) * 30
    

    【讨论】:

    • 非常感谢 myuch FHTMitchell。
    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2014-08-03
    • 2019-05-08
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多