Is there a way to dynamically expand an scipy array
from scipy import sci
time = sci.zeros((n,1), 'double')
Can we increase the size of time
array after this?
In python, A dynamic array is an 'array' from the array module. E.g. This datatype is essentially a cross between the built-in 'list' type and the numpy 'ndarray' type. Like an ndarray, elements in arrays are C types, specified at initialization.
To expand the shape of an array, use the numpy. expand_dims() method. Insert a new array that will appear at the axis position in the expanded array shape. The function returns the View of the input array with the number of dimensions increased.
It's possible to expand arrays using the resize
method, but it can be a slow operation for large arrays, so avoid it if possible*.
For example:
import scipy as sci
n=3
time = sci.zeros((n,1), 'double')
print(time)
# [[ 0.]
# [ 0.]
# [ 0.]]
time.resize((n+1,2))
print(time)
# [[ 0. 0.]
# [ 0. 0.]
# [ 0. 0.]
# [ 0. 0.]]
* Instead, figure out how large an array you need from the beginning, and allocate that shape for time
only once. In general it is faster to over-allocate than it is to resize.
The resulting time
array being just a Numpy Array, you can use standard Numpy methods for manipulating them, such as numpy#insert which returns a modified array with new elements inserted into it. Examples usage, from Numpy docs (here np
is short for numpy
) :
>>> a = np.array([[1, 1], [2, 2], [3, 3]])
>>> a
array([[1, 1],
[2, 2],
[3, 3]])
>>> np.insert(a, 1, 5)
array([1, 5, 1, 2, 2, 3, 3])
>>> np.insert(a, 1, 5, axis=1)
array([[1, 5, 1],
[2, 5, 2],
[3, 5, 3]])
Also, numpy#insert
is faster than numpy#resize
:
>>> timeit np.insert(time, 1, 1, 1)
100000 loops, best of 3: 16.7 us per loop
>>> timeit np.resize(time, (20,1))
10000 loops, best of 3: 27.1 us per loop
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