如何快速将NumPy数组中超出指定值的元素截断至该值?
高效截断NumPy数组元素的方法
你可以用NumPy内置的矢量化函数来实现,比numpy.vectorize快得多,推荐两种方法:
使用
numpy.minimum:直接对数组和目标值n逐元素取最小值,天生就是矢量化操作,效率极高。
示例代码:import numpy as np arr = np.array([1, 5, 2, 6, 6.7, 8, 10]) n = 6 truncated_arr = np.minimum(arr, n) print(truncated_arr) # 输出: [1. 5. 2. 6. 6. 6. 6.]使用
numpy.clip:这个函数可以同时限制元素的上下界,只设置上界即可满足需求(下界设为None表示不限制)。
示例代码:truncated_arr = np.clip(arr, a_min=None, a_max=n)
为什么numpy.vectorize速度慢?
numpy.vectorize并不是真正的矢量化实现,它只是给循环套了个语法糖,底层还是逐个处理元素,所以面对大数组时速度会明显变慢。而上面的两个函数都是基于NumPy的C语言底层矢量化运算,能充分利用数组的批量处理优势,速度提升非常显著。
内容的提问来源于stack exchange,提问作者Enx
相关产品推荐
相关产品推荐

