Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用numpy提高循环性能_Numpy_Loops_For Loop - Fatal编程技术网

使用numpy提高循环性能

使用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

下面的代码片段需要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 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,:]我再次更新了代码。