Is there a way to dynamically expand an scipy array
from scipy import sci
time = sci.zeros((n,1), 'double')
Can we i开发者_运维问答ncrease the size of time
array after this?
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
精彩评论