如何用Numpy分别对频率求和?替代for loop实现指定结果
使用NumPy生成目标数组的解决方案
没问题!用NumPy实现这个需求非常简洁,核心就是利用numpy.repeat()这个专门处理元素重复的函数,完全替代for循环的逐次拼接操作。
实现代码
import numpy as np # 定义目标数组中按顺序出现的元素,以及每个元素对应的重复次数 target_values = np.array([1, 2, 1, 2, 3, 1, 4, 1]) repeat_counts = np.array([3, 2, 1, 3, 2, 1, 1, 1]) # 生成结果数组 result_array = np.repeat(target_values, repeat_counts) # 转换成列表格式和你需要的结果一致 print(result_array.tolist()) # 输出: [1, 1, 1, 2, 2, 1, 2, 2, 2, 3, 3, 1, 4, 1]
原理说明
np.repeat()是NumPy的向量化操作函数,它会遍历target_values中的每个元素,按照repeat_counts中对应的次数进行重复,最后自动拼接成一个连续的数组。- 相比for循环的逐次添加,这种方式在处理大规模数据时效率会高很多——因为NumPy的向量化操作是底层用C实现的,避免了Python循环的额外开销。
内容的提问来源于stack exchange,提问作者yuchen huang
相关产品推荐
相关产品推荐

