动态扩展scipy数组

5 投票
2 回答
4296 浏览
提问于 2025-04-17 03:02

有没有办法动态地扩展一个scipy数组呢?

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

在这之后,我们能增加time数组的大小吗?

2 个回答

4

生成的 time 数组其实就是一个 Numpy数组,你可以使用标准的 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#insert 的速度比 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
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。一般来说,提前分配比后期调整大小要快。

撰写回答