如何向NUMPY数组添加行和列?
你好,我有一个包含1000组数据的数组,每组数据有1500个点。
这个数组的大小是(1000x1500),是用np.zeros((1500, 1000))创建的,然后再把数据填进去。
现在如果我想把这个数组扩展到1600 x 1100的大小,我是需要用hstack和vstack来添加数组,还是有更好的方法呢?
我希望原本在1000x1500这个部分的数据不变,只是在底部和右边添加一些空白数据(零),大概就是这个意思。
谢谢。
4 个回答
2
无论怎样,你都得重新分配一块内存,所以用 arr.resize()
、np.concatenate
、hstack/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))
是不一样的,后者会重复之前的行,这可能不是你想要的效果。
如果你不想把元素初始化为零(因为这样可能是多余的),你可以使用 hstack
和 vstack
来添加包含新元素的数组;numpy.concatenate()
也可以用(具体可以查一下 pydoc numpy.concatenate),据我了解,它的功能更通用。
无论哪种方法,我猜为了扩展数组,可能需要分配一个新的内存块,而且这些方法的耗时大致相同。