如何用布尔数组操作NumPy数组元素(无需迭代)
如何用布尔数组操作NumPy数组元素(无需迭代)
嘿,这个需求用NumPy自带的布尔索引就能完美解决,完全不用手动写循环,效率还高得飞起!
你只需要一行核心代码就能搞定:
to_change[true_false] *= 20
给你完整的可运行示例,跑一下就能直观看到效果:
import numpy as np true_false = np.array([[True, False], [True, False]]) to_change = np.array([[10, 10], [10, 10]]) # 通过布尔索引定位需要修改的元素,直接原地乘20 to_change[true_false] *= 20 print(to_change)
执行后输出的结果会是:
[[200 10] [200 10]]
原理其实很简单:NumPy原生支持用布尔数组作为索引,当你把true_false放到to_change的索引位置时,会自动筛选出所有true_false里值为True对应的to_change元素,然后对这些元素统一执行乘法操作。这种向量化操作是NumPy的核心优势,底层是用优化过的C代码实现的,比手动写Python循环快得多——尤其是处理大数组的时候,性能差距会特别明显。
如果你不习惯原地修改的写法,也可以换成这种形式,效果完全一致:
to_change[true_false] = to_change[true_false] * 20
备注:内容来源于stack exchange,提问作者flameshooter09
相关产品推荐
相关产品推荐

