我目前正在尝试优化 Python 中的一个函数。
是否有巧妙地使用 Numpy 来在更短的时间内获得结果?
我的数据形状为 (30000,18000),window_size 为 2。
import time
import numpy as np
def denoise(data, window_size, axis=0):
output = np.zeros((data.shape[axis], data.shape[axis+1] // window_size))
i = 0
for k in range(0, data.shape[axis + 1] - window_size, window_size):
output[:,i] = np.sum(data[:,k:k+window_size],axis=axis+1)/window_size
i = i+1
return output
data = np.random.random((30000,18000))
start = time.time()
output = denoise(data,2)
print(f'Elapsed time {time.time()-start} s')
您可以对当前的方法进行微小但显着的改进。
n = data.shape[axis+1]
output = np.zeros((data.shape[axis], n // window_size))
i = 0
for k in range(0, window_size):
output += data[:, k:n:window_size]
return output/window_size