给定一个2D的M x N
的NumPy数组和一个旋转距离列表,我想要将所有M
行在列表中的距离上进行旋转。这是我目前拥有的代码:
import numpy as np
M = 6
N = 8
dists = [2,0,2,1,4,2] # for example
matrix = np.random.randint(0,2,(M,N))
for i in range(M):
matrix[i] = np.roll(matrix[i], -dists[i])
最后两行实际上是内部循环的一部分,会被执行数十万次,并且根据cProfile测量,这成为了我的性能瓶颈。例如,是否有可能避免for循环并更加高效地执行此操作?
timeit
模块测试这些代码行的速度快了近65%,但当我将其放入完整代码中时,它实际上变慢了20%(多次运行平均值,标准偏差不高)。有什么猜测是为什么吗? - Gekke Boer