您好我有1000个数据系列,每个系列有1500个点。
它们形成一个(1000x1500)大小的Numpy数组,使用np.zeros((1500,1000))创建,然后填充数据。
现在如果我希望阵列增长到1600 x 1100怎么办?我是否必须使用hstack和vstack添加数组,还是有更好的方法?
我希望数据的1000x1500片段中的数据不会被改变,基本上只有空白数据(零)添加到底部和右侧。
感谢。
答案 0 :(得分:8)
这应该做你想要的(即,使用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 on到b:
>>> b[:3,:3] = a
>>> b
array([[ 1., 2., 2., 0.],
[ 7., 0., 7., 0.],
[ 0., 3., 0., 0.],
[ 0., 0., 0., 0.]])
答案 1 :(得分:3)
如果您想在添加的元素中添加零,my_array.resize((1600, 1000))
应该可以正常工作。请注意,这与numpy.resize(my_array, (1600, 1000))
不同,之前的行是重复的,这可能不是您想要的。
否则(例如,如果您想避免将元素初始化为零,这可能是不必要的),您确实可以使用hstack
和vstack
来添加包含新元素的数组; numpy.concatenate()
(参见pydoc numpy.concatenate)也应该有用(据我所知,它更为通用)。
在任何一种情况下,我都猜测必须分配一个新的内存块以扩展数组,并且所有这些方法大约需要相同的时间。
答案 2 :(得分:2)
无论如何,你都会被重新分配一大块内存,所以如果你使用arr.resize()
,np.concatenate
,hstack/vstack
等,这并不重要。注意如果你按顺序累积大量数据,那么Python列表通常会更有效。
答案 3 :(得分:0)