8

您好,我有一个 1000 个数据系列,每个系列有 1500 个点。

它们形成一个 (1000x1500) 大小的 Numpy 数组,使用 np.zeros((1500, 1000)) 创建,然后填充数据。

现在,如果我希望数组增长到 1600 x 1100 怎么办?我必须使用 hstack 和 vstack 添加数组还是有更好的方法?

我希望不要更改 1000x1500 数组中已经存在的数据,基本上只在底部和右侧添加空白数据(零)。

谢谢。

4

4 回答 4

10

这应该做你想做的(,使用 3x3 数组和 4x4 数组来表示 OP 中的两个数组)

>>> import numpy as NP
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
>>> a
>>> array([[1, 2, 2],
           [7, 0, 7],
           [0, 3, 0]])

>>> b = NP.zeros((4, 4))

将 a映射到 b:

>>> b[:3,:3] = a

>>> b
    array([[ 1.,  2.,  2.,  0.],
           [ 7.,  0.,  7.,  0.],
           [ 0.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])
于 2009-12-16T16:42:54.000 回答
3

如果您希望添加的元素为零,my_array.resize((1600, 1000))应该可以。请注意,这与 不同numpy.resize(my_array, (1600, 1000)),其中之前的行是重复的,这可能不是您想要的。

否则(例如,如果您想避免将元素初始化为零,这可能是不必要的),您确实可以使用 hstackandvstack添加一个包含新元素的数组;numpy.concatenate()(请参阅 pydoc numpy.concatenate)也应该可以工作(据我所知,它只是更通用)。

无论哪种情况,我都猜想必须分配一个新的内存块才能扩展数组,并且所有这些方法都需要大约相同的时间。

于 2009-12-15T21:06:06.100 回答
2

arr.resize()无论如何,你都会被卡住重新分配一块内存,所以如果你使用, np.concatenate,等并不重要hstack/vstack。请注意,如果你按顺序累积大量数据,Python 列表通常更有效。

于 2009-12-16T18:06:51.147 回答
0

您应该根据您的精确要求使用reshape()和/或resize() 。

如果你想要作者的章节和诗句,你最好在 numpy 讨论板上发帖。

于 2009-12-15T20:25:50.957 回答