Python实现不同形状numpy数组带偏移循环叠加到固定形状数组
Numpy 循环偏移叠加函数的简洁实现
你可以直接使用numpy原生的np.add.at方法配合模运算实现该功能,全程为原地操作,无额外内存开销,性能完全满足音频缓冲区实时处理需求,核心逻辑仅一行:
import numpy as np def sumWithRoll(buffer, indata, offset): np.add.at(buffer, (np.arange(min(len(indata), len(buffer))) + offset) % len(buffer), indata[:len(buffer)])
效果验证
示例1
a = np.array([1, 1, 1, 1, 1]) b = np.array([5, 6]) sumWithRoll(a, b, offset=1) print(a) # 输出:[1 6 7 1 1]
示例2
a = np.array([1, 1, 1, 1, 1]) b = np.array([5, 6, 7, 8]) sumWithRoll(a, b, offset=3) print(a) # 输出:[8 9 1 6 7]
实现说明
- 索引计算时自动对
offset做模长度处理,支持任意大小的偏移值 - 自动截断长度超过
buffer的输入数组indata,和原有逻辑完全对齐 - 所有运算均为numpy向量化实现,运行速度和你原有的手动切片实现相当,没有性能损失
内容的提问来源于stack exchange,提问作者user2079353
相关产品推荐
相关产品推荐

