首页 > 解决方案 > 如何更新满足列条件的numpy列?

问题描述

如果我有以下情况:

import numpy as np
a = np.array([[0, 1],
              [1, 3],
              [4, 4]])

如果满足列条件,则希望更新列值。例如,如果第 2 列值大于 2,则仅将该列值替换为 9。

a = [[0, 1],
     [1, 9],
     [4, 9]]

我原以为这会起作用,但它会更新该行中的所有值。

a[a[:,1] > 2] = 9

但它会替换行中的所有值。

a =[[0, 1],
    [9, 9],
    [9, 9]]

我猜我对如何在这里创建布尔索引缺少一些了解。

标签: python-2.7numpy

解决方案


你需要:

import numpy as np
a = np.array([[0, 1],
               [1, 3],
               [4, 4]])

a[:,1]=  np.where(a[:,1]>2, 9, a[:,1])

print(a)

输出:

array([[0, 1],
       [1, 9],
       [4, 9]])

为什么你的代码不起作用

尝试打印出来print(a[a[:,1] > 2])

它将输出为:

[[1 3]
 [4 4]]

如果第二个索引大于 2,它将检查第二个索引,它将返回一整行。


推荐阅读