【问题标题】:How to Use Boolean Array to Replace Specific Indices in Python如何使用布尔数组替换 Python 中的特定索引
【发布时间】:2016-09-08 15:28:09
【问题描述】:
我有一个 numpy 和一个布尔数组:
nparray = [ 12.66 12.75 12.01 13.51 13.67 ]
bool = [ True False False True True ]
我想用相同的值除以 3 替换 nparray 中的所有值,其中 bool 为 False。
我是一名学生,我对 python 索引相当陌生。非常感谢任何意见或建议!
【问题讨论】:
标签:
python
arrays
numpy
indexing
boolean
【解决方案1】:
只用 python 你可以这样做:
nparray = [12.66, 12.75, 12.01, 13.51, 13.67]
bool = [True, False, False, True, True]
map(lambda x, y: x if y else x/3.0, nparray, bool)
结果是:
[12.66, 4.25, 4.003333333333333, 13.51, 13.67]
【解决方案2】:
命名一个数组 bool 可能不是最好的主意。正如 ayhan 尝试将其重命名为 bl 或其他名称一样。
您可以使用 numpy.where 查看文档here
nparray2 = np.where(bl == False, nparray/3, nparray)
【解决方案3】:
使用boolean indexing 和~ 作为否定运算符:
arr = np.array([12.66, 12.75, 12.01, 13.51, 13.67 ])
bl = np.array([True, False, False, True ,True])
arr[~bl] = arr[~bl] / 3
array([ 12.66 , 4.25 , 4.00333333, 13.51 , 13.67 ])