这就是
numpy.repeat它的作用:
>>> a = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])>>> s = np.array([3, 3, 9, 3, 6, 3])>>> np.repeat(a, s)array([ 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6])
在纯Python中,您可以执行以下操作:
>>> from itertools import repeat, chain, imap>>> list(chain.from_iterable(imap(repeat, a, s)))[0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6]
但是,当然它将比其NumPy慢得多:
>>> s = [3, 3, 9, 3, 6, 3]*1000>>> a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]*1000>>> %timeit list(chain.from_iterable(imap(repeat, a, s)))1000 loops, best of 3: 1.21 ms per loop>>> %timeit np.repeat(a_a, s_a) #a_a and s_a are NumPy arrays of same size as a and b10000 loops, best of 3: 202 µs per loop



