一个小的改善,我可以很容易地看到,而不是下一个,:
for tup in tups:
x[tup[1],tup[0]] = x[tup[1],tup[0]] + 1
尝试做
for tup in tups:
x[tup[1],tup[0]] += 1
因为这将覆盖相同的内存ADRESS,而不是创建一个新的内存现货(注意:在这种情况下,这可能只会导致边际加速,但如果您使用相同的技巧A + = B而不是C = A + B,在A和B为一个Gb的numpy ndarrays每个左右,它实际上是一个巨大的加速)
为什么你阅读元组的东西?你是不是应该首先阅读它作为一个numpy的ndarray,而不是将它作为一个元组列表读取,而不是改变为一个numpy数组?你在哪里创建元组列表?如果可以避免这种情况,那么避免使用元组列表会更好,而不是创建它,并且以后再交换到一个numpy解决方案?
编辑:所以我只想告诉你这个加速,你可以通过+ =得到,同时问你为什么有一个大的元组列表,但是这太长了,以至于无法将这两个东西放在评论中
另一个问题:我是否正确地假设你的元组可以有多个重复?像
tups = [(1,0), (2,4), (1,0), (1,2), ..., (999, 999), (992, 999)]
因此,在您的endresult,其他值比0和1将存在?或者是你的结果数组只存在一个和零的数组?
“对于大量的点~10^6 ...” - 你的意思是1000 * 1000的图片?它真的需要几个小时吗? – zhangxaochen
不,我的意思是有10^6或更高元组的tups。我想我可能会遇到另一个让它放慢速度的问题。 –
@ medPhys-pl这可能会有所帮助:[增加Numpy多重数组与重复索引](http://stackoverflow.com/questions/7433142/increment-numpy-multi-d-array-with-repeated-indices) –