如何向NUMPY数组添加行和列?

10 投票
4 回答
20232 浏览
提问于 2025-04-15 17:03

你好,我有一个包含1000组数据的数组,每组数据有1500个点。

这个数组的大小是(1000x1500),是用np.zeros((1500, 1000))创建的,然后再把数据填进去。

现在如果我想把这个数组扩展到1600 x 1100的大小,我是需要用hstack和vstack来添加数组,还是有更好的方法呢?

我希望原本在1000x1500这个部分的数据不变,只是在底部和右边添加一些空白数据(零),大概就是这个意思。

谢谢。

4 个回答

2

无论怎样,你都得重新分配一块内存,所以用 arr.resize()np.concatenatehstack/vstack 等方法其实没什么太大区别。需要注意的是,如果你是顺序地增加很多数据,Python 的列表通常会更高效一些。

12

这段代码应该能满足你的需求(也就是说,它使用3x3和4x4的数组来表示提问者提到的两个数组)。

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

如果你想在新增的元素中填充零,可以使用 my_array.resize((1600, 1000)) 这个方法。需要注意的是,这和 numpy.resize(my_array, (1600, 1000)) 是不一样的,后者会重复之前的行,这可能不是你想要的效果。

如果你不想把元素初始化为零(因为这样可能是多余的),你可以使用 hstackvstack 来添加包含新元素的数组;numpy.concatenate() 也可以用(具体可以查一下 pydoc numpy.concatenate),据我了解,它的功能更通用。

无论哪种方法,我猜为了扩展数组,可能需要分配一个新的内存块,而且这些方法的耗时大致相同。

撰写回答