The R function rep() replicates each element of a vector:
> rep(c("A","B"), times=2) [1] "A" "B" "A" "B"
This is like the list multiplication in Python:
>>> ["A","B"]*2 ['A', 'B', 'A', 'B']
But with the rep() R function it is also possible to specifiy the number of repeats for each element of the vector:
> rep(c("A","B"), times=c(2,3)) [1] "A" "A" "B" "B" "B"
Is there such a function availbale in Python ? Otherwise how could one define it ? By the way I'm also interested in such a function for duplicating rows of an array.
Which function replicates elements of vectors? Explanation: The rep function replicates elements of vectors. The seq function creates a regular sequence of values to form a vector.
What is the rep() function? In simple terms, rep in R, or the rep() function replicates numeric values, or text, or the values of a vector for a specific number of times.
rep() equivalent in Python Use numpy arrays and the numpy. repeat function.
There are two methods to create a vector with repeated values in R but both of them have different approaches, first one is by repeating each element of the vector and the second repeats the elements by a specified number of times. Both of these methods use rep function to create the vectors.
Not sure if there's a built-in available for this, but you can try something like this:
>>> lis = ["A", "B"] >>> times = (2, 3) >>> sum(([x]*y for x,y in zip(lis, times)),[]) ['A', 'A', 'B', 'B', 'B']
Note that sum()
runs in quadratic time. So, it's not the recommended way.
>>> from itertools import chain, izip, starmap >>> from operator import mul >>> list(chain.from_iterable(starmap(mul, izip(lis, times)))) ['A', 'A', 'B', 'B', 'B']
Timing comparions:
>>> lis = ["A", "B"] * 1000 >>> times = (2, 3) * 1000 >>> %timeit list(chain.from_iterable(starmap(mul, izip(lis, times)))) 1000 loops, best of 3: 713 µs per loop >>> %timeit sum(([x]*y for x,y in zip(lis, times)),[]) 100 loops, best of 3: 15.4 ms per loop
Use numpy
arrays and the numpy.repeat function:
import numpy as np x = np.array(["A", "B"]) print np.repeat(x, [2, 3], axis=0) ['A' 'A' 'B' 'B' 'B']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With