Вот моя реализация, мне пришлось смоделировать некоторые данные, так что, если она не делает то, что вам нужно, я с удовольствием подправлю ее.
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 вызова, но только две записи в таблице ha sh:
>>> 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]])}