I want replicate a small array to specific length array
Example:
var = [22,33,44,55] # ==> len(var) = 4
n = 13
The new array tha
There are better ways to replicate the array, for example you could simply use np.resize:
Return a new array with the specified shape.
If the new array is larger than the original array, then the new array is filled with repeated copies of
a
. [...]
>>> import numpy as np
>>> var = [22,33,44,55]
>>> n = 13
>>> np.resize(var, n)
array([22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22])
First of all, you don't get an error, but a warning, that var_new[di] = var
is deprecated if var_new[di]
has dimensions that do not match var
.
Second, the error message tells what to do: use
var_new[di].flat = var
and you do not get a warning any more and it is guaranteed to work.
Another, easy way to do this if numpy
is not needed is to just use itertools:
>>> import itertools as it
>>> var = [22, 33, 44, 55]
>>> list(it.islice(it.cycle(var), 13))
[22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22]
Copy the array (called lists in python) with [:] because they are mutable. The python short cut is then just to multiply the copy and add one more element.
>>> var = [22, 33, 44, 55]
>>> n = 3
>>> newlist = var[:]*n + var[:1]
gives the 13 elements you want.
var = [22,33,44,55]
n = 13
Repeating a list (or any other iterable) can be done without numpy
, using itertools
's cycle()
and islice()
functions
from itertools import cycle, islice
var_new = list(islice(cycle(var),0,n)