gpt4 book ai didi

python - 基于所选参数的 Memoize 函数结果

转载 作者:行者123 更新时间:2023-12-03 19:14:41 27 4
gpt4 key购买 nike

我有一个具有以下签名的函数:

def spectrogram(signal: numpy.ndarray, sampling_frequency=16000, win_len=512, hop=256, win_type='hanning')

该函数在输入(信号)上需要一个 numpy 数组,加上一些其他参数,并输出一个 numpy 数组。它计算给定音频文件的频谱图以获得某些声学特征。每个文件,我将多次调用此函数,通常使用相同的参数,但并非总是如此。对于某些功能,我可能会更改 hopwin_type。我想缓存结果,这样我就不会多次运行相同的计算。结果对每个文件有效。这些文件将与 joblib 并行处理。

我正在考虑根据文件名(这不是我通常在函数中使用的参数)和字段 sampling_frequencywin_len 记住结果, hopwin_type(即不是 signal - 这可以是一个大数组,查看文件名效率更高,这是唯一的).

我怎样才能最好地记住结果?我见过的所有解决方案都会根据提供的输入缓存结果;就我而言,我想根据选定的字段进行内存。我使用的是 Python 3.6。

最佳答案

这是我的实现,我必须模拟一些数据,所以如果它不能完全满足您的需要,我很乐意稍微调整一下。

def memo(hashTable, fileName, signal: np.ndarray, sampling_frequency=16000, win_len=512, hop=256, win_type='hanning'):  
new_hash = hash(fileName + str(sampling_frequency) + str(win_len) + str(hop) + win_type)
if new_hash in hashTable.keys():
return hashTable[new_hash]
else:
answer = spectrogram(signal, sampling_frequency, win_len, hop, win_type)
hashTable[new_hash] = answer
return answer


def spectrogram(signal: np.ndarray, sampling_frequency=16000, win_len=512, hop=256, win_type='hanning'):
makeArrayUnique = hop - 256
return np.arange(makeArrayUnique, 24 + makeArrayUnique).reshape(2,12)

def testHash():
hashTable = {}
dummySignal = np.zeros(10)
print('First call', memo(hashTable, 'file1', signal=dummySignal))
print('Second Call', memo(hashTable, 'file1', signal=dummySignal, hop=260))
print('First call again', memo(hashTable, 'file1', signal=dummySignal))

print('Hash Table', hashTable)

输出显示 3 个调用但哈希表中只有两个条目:

>>> testHash()
First call [[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
Second Call [[ 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27]]
First call again [[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
Hash Table {-4316472197502448580: array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]]), 6772234510013844540: array([[ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]])}

关于python - 基于所选参数的 Memoize 函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61155959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com