为numpy数组中的整行赋值

时间:2015-11-19 18:24:52

标签: python arrays numpy rows

我有以下带有成绩的数组示例:

grades = np.array([[ 1,  1,  2,  -3],[ 4,  5,  6,  7],[ 8,  9, -3, 11],[12, 13, 14, 15]])

我想用“-3”标识元素并将整行更改为该数字,例如结果:

grades = np.array([[ -3,  -3,  -3,  -3],[ 4,  5,  6,  7],[ -3,  -3, -3, -3],[12, 13, 14, 15]])

到目前为止,我试过了:

grades[np.argwhere(grades==-3)]=-3

但我得到以下结果,其他行也受到影响:

array([[-3, -3, -3, -3],[ 4,  5,  6,  7],[-3, -3, -3, -3],[-3, -3, -3, -3],[16, 17, 18, 19]])

请问任何想法?谢谢!

1 个答案:

答案 0 :(得分:5)

首先使用简单==numpy.any查找哪些行包含-3。现在索引这个布尔数组并为其分配-3,广播将负责其余部分。

>>> grades = np.array([[ 1,  1,  2,  -3],[ 4,  5,  6,  7],[ 8,  9, -3, 11],[12, 13, 14, 15]])
>>> grades[np.any(grades == -3, axis=1)] = -3
>>> grades
array([[-3, -3, -3, -3],
       [ 4,  5,  6,  7],
       [-3, -3, -3, -3],
       [12, 13, 14, 15]])