【发布时间】:2021-05-22 03:57:46
【问题描述】:
我有 2 个 numpy 数组,想用偏移量对它们求和。 总和总是具有数组“a”的形状
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]
此外,如果数组“b”很长或偏移量足够大,它应该翻转数组“a”的末尾:
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]
我需要这个来合并两个循环播放的声音缓冲区,并希望有一个快速的解决方案,占用更少的内存。
编辑: 我有一个看起来很长的解决方案:
def sumWithRoll(buffer, indata, idx):
buffLen = len(buffer)
dataLen = len(indata)
if dataLen > buffLen:
indata = indata[0:buffLen]
dataLen = buffLen
idx = idx % buffLen
idx2 = (idx + dataLen) % buffLen
if idx2 <= idx:
idx3 = buffLen - idx
buffer[idx:buffLen] += indata[0:idx3]
buffer[0:idx2] += indata[idx3:buffLen]
else:
buffer[idx:idx2] += indata[:]
希望有Pythonic的一两行解决方案
【问题讨论】: