如何用Numpy实现基于数值条件的原始数据校准操作
用Numpy替代循环实现数据校准
你的原始循环逻辑是对不同区间的数值做乘法校准,用Numpy可以通过批量数组操作替代循环,效率更高,代码更简洁。
原始循环代码
arr = list(range(1000)) # random array for i in range(len(arr)): if arr[i] > 200 and arr[i] < 500: arr[i] = arr[i]*2.5 elif arr[i] >= 500 and arr[i] < 1000: arr[i] = arr[i]*2.3
Numpy实现方法
方法一:布尔索引(直观易读)
利用Numpy的布尔索引直接定位目标区间的元素,批量修改:
import numpy as np # 将列表转为numpy数组 arr = np.arange(1000) # 筛选200 < 数值 < 500的元素,乘2.5 mask1 = (arr > 200) & (arr < 500) arr[mask1] *= 2.5 # 筛选500 ≤ 数值 < 1000的元素,乘2.3 mask2 = (arr >= 500) & (arr < 1000) arr[mask2] *= 2.3
方法二:np.where(链式逻辑,一行完成)
用np.where()嵌套实现多条件判断,一次性完成所有替换:
import numpy as np arr = np.arange(1000) arr = np.where( (arr > 200) & (arr < 500), arr * 2.5, np.where( (arr >= 500) & (arr < 1000), arr * 2.3, arr # 不满足条件的元素保持原值 ) )
两种方法都能实现和原循环完全一致的效果,且数据量越大,Numpy的批量操作优势越明显。
内容的提问来源于stack exchange,提问作者Staked
相关产品推荐
相关产品推荐

