使用numpy提高循环性能
下面的代码片段需要0.7秒。我想提高速度。基本上,代码将b中与a具有相同索引的所有值相加,并将它们存储在a的索引中相同的位置,但存储在不同的数组中。所以基本上数组a包含0-255之间的值,这些值表示临时数组的索引使用numpy提高循环性能,numpy,loops,for-loop,Numpy,Loops,For Loop,下面的代码片段需要0.7秒。我想提高速度。基本上,代码将b中与a具有相同索引的所有值相加,并将它们存储在a的索引中相同的位置,但存储在不同的数组中。所以基本上数组a包含0-255之间的值,这些值表示临时数组的索引 a = np.random.randint(256, size=(40000,2)) b= np.arange(1280000).reshape(40000, 32) temp = np.zeros((1,32,256,256)) for indx, pnt in enumerat
a = np.random.randint(256, size=(40000,2))
b= np.arange(1280000).reshape(40000, 32)
temp = np.zeros((1,32,256,256))
for indx, pnt in enumerate(a):
temp[0,:,pnt[0],pnt[1]] += b[indx,:]
谢谢。这个答案可能有点偏左,但我认为不值得竭尽全力尝试矢量化 在这个问题上抛出一些
numba
从numba导入jit
@准时制
def计算工具(a、b):
温度=np.零((1,32256256))
对于indx,枚举中的pnt(a):
温度[0,:,pnt[0],pnt[1]+=b[indx,:]
返回温度
而且至少要快一点
您似乎还知道a
必须小于256,因此可以通过为数组指定数据类型来节省内存并可能获得一些性能
a=np.random.randint(256,大小=(40000,2),dtype=np.uint8)
由于temp
是二维数组,因此您的代码似乎无法与temp[0,:,pnt[0],pnt[1]]一起运行。谢谢您的反馈。我确实更新了阵列。没有,仍然没有运行。我想你的意思是temp=np.zero((32256256))
…真的。或者更改此行->临时[0,:,pnt[0],pnt[1]+=b[indx,:]我再次更新了代码。