如何在Numpy数组中若整行含True则更新该行最后一个元素?
问题解决:批量处理布尔Numpy数组行
原代码问题
你的代码存在两个关键问题:
- 赋值操作错误:
x[-1] == True是比较运算而非赋值,应改为x[-1] = True - 效率低下:
np.apply_along_axis本质是Python层循环,对于50万行的大型数组,完全浪费了Numpy的向量化运算优势,处理速度会极慢
高效向量化实现
直接用Numpy向量化操作处理,速度比循环写法快几个数量级:
import numpy as np # 假设mask是你的(500000, 36)布尔数组 # 1. 计算每行是否存在True元素,得到形状为(500000,)的布尔数组 has_true_in_row = mask.any(axis=1) # 2. 将对应行的最后一列设为True mask[:, -1] = has_true_in_row
原代码修正(不推荐)
如果一定要保留循环写法,修正赋值错误即可,但该方式不适用于大型数组:
def update_array(x): if x.any(): x[-1] = True # 修正为赋值运算符= np.apply_along_axis(update_array, axis=1, arr=mask)
内容的提问来源于stack exchange,提问作者matt.aurelio
相关产品推荐
相关产品推荐

