numba
@Daniel F. , . Python, , . Numba , .
import numba as nb
import numpy as np
import time
def main():
b = np.random.randint(1,10,(10000,))
a = np.random.randint(1,10,(np.sum(b),))
nb_splitsum = nb.njit(nb.int32[:](nb.int32[:], nb.int32[:]),nogil=True)(splitsum)
t1=time.time()
for i in xrange(0,1000):
c=nb_splitsum(a,b)
print("Numba Solution")
print(time.time()-t1)
t1=time.time()
for i in xrange(0,1000):
c=np.add.reduceat(a, np.r_[0, np.cumsum(b)[:-1]])
print("Numpy Solution")
print(time.time()-t1)
def splitsum(a,b):
sum=np.empty(b.shape[0],dtype=np.int32)
ii=0
for i in range(0,b.shape[0]):
for j in range(0,b[i]):
sum[i]+=a[ii]
ii+=1
return sum
if __name__ == "__main__":
main()
Numba Solution
0.125
Numpy Solution
0.280999898911
0,15 . , , , , numpy.