动态扩展scipy数组

时间:2011-09-25 14:17:16

标签: python scipy

有没有办法动态扩展scipy数组

from scipy import sci
time = sci.zeros((n,1), 'double')

我们可以在此之后增加time数组的大小吗?

2 个答案:

答案 0 :(得分:5)

可以使用resize方法扩展数组,但对于大型数组来说这可能是一个缓慢的操作,所以尽可能避免使用 *

例如:

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.]]

* 相反,要弄清楚从一开始就需要多大的数组,并且只为time分配一次该形状。一般来说,过度分配比调整大小更快。

答案 1 :(得分:4)

生成的time数组只是Numpy Array,您可以使用标准Numpy方法来操作它们,例如numpy#insert,它返回一个已插入新元素的已修改数组。来自Numpy文档的示例用法(此处npnumpy的缩写):

>>> 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]])

此外,numpy#insertnumpy#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