将for循环实现的连续重复值检测代码改写为NumPy向量化版本
NumPy向量化改写方案
需求
找出二维数组schedules中,不存在任何连续位置元素值相等的行的索引,改写原双层Python显式for循环实现为纯NumPy向量化操作,保证输出结果和原代码完全一致。
改写后完整代码
import numpy as np # 与原代码一致的测试数据生成逻辑 generator = np.random.default_rng(999) schedules = generator.integers(low=0, high=5, size=(1000, 21)) # 纯向量化核心逻辑 # 逐元素比较每行相邻位置的值,判断是否存在相等,再筛选无相邻相等的行索引 match_mask = np.all(schedules[:, 1:] != schedules[:, :-1], axis=1) l = np.where(match_mask)[0].tolist() print(l)
逻辑解释
- 用数组切片直接取每行错位的两部分:
schedules[:, 1:]是每行第2列到末尾的元素,schedules[:, :-1]是每行第1列到倒数第二列的元素,二者逐元素比较即可一次性得到所有相邻位置是否相等的布尔矩阵,完全替代内层循环的差值判断、计数逻辑 np.all(..., axis=1)沿列维度做判断,筛选出整行没有任何相邻位置相等的行,得到布尔掩码,替代外层循环的计数、条件判断逻辑np.where直接从布尔掩码中提取符合条件的行索引,转换为list后和原代码输出格式、结果完全一致,全程无Python层显式for循环,执行效率远高于原双层循环实现。
内容的提问来源于stack exchange,提问作者r19
相关产品推荐
相关产品推荐

