Here we test and check the performance of the array_arange implementation.
from __future__ import print_function
from functools import partial
from itertools import izip as zip, imap as map
from numpy import arange
import numpy as np
onesi = partial(np.ones, dtype=np.int32)
cumsumi = partial(np.cumsum, dtype=np.int32)
%matplotlib inline
def aarng(start, end):
return np.hstack(map(arange, start, end))
def aarng_for_list(start, end):
return np.hstack([arange(s, e) for s, e in zip(start, end)])
def aarng_for_gen(start, end):
return np.hstack((arange(s, e) for s, e in zip(start, end)))
def aarng_concat(start, end):
return np.concatenate(list(map(arange, start, end)))
def aarng_concat_list(start, end):
return np.concatenate([arange(s, e) for s, e in zip(start, end)])
def aarng_concat_tuple(start, end):
return np.concatenate(tuple(map(arange, start, end)))
def aarng_one(start, end):
n = end - start
arr = onesi(n.sum())
# set pointers correct for cumsum
ptr = cumsumi(n[:-1])
arr[0] = start[0]
arr[ptr] = start[1:]
# Correct for previous values
arr[ptr] -= start[:-1] + n[:-1] - 1
return cumsumi(arr)
# Samples
N = 200000
start = np.random.randint(1000, size=N)
end = start + np.random.randint(10, size=N) + start
%timeit np.array((aarng(start, end)))
%timeit np.array(aarng_for_list(start, end))
%timeit np.array(aarng_for_gen(start, end))
%timeit np.array(aarng_concat(start, end))
%timeit np.array(aarng_concat_list(start, end))
%timeit np.array(aarng_concat_tuple(start, end))
%timeit np.array(aarng_one(start, end))