另一个numpy数组处理问题: 我有一个约。 2000³条目numpy数组,固定大小(我知道),包含整数。我想用另一个整数填充数组,以便它在所有维度中被包围。对于整个填充过程,此整数是固定的。
example (2D)
1----->000
010
000
我有两个想法,导致结果:
创建一个更大的numpy数组,包含填充值并在填充中“切片”旧区域:
padded=np.zeros((z+2,x+2,y+2))
padded[1:z+1,1:x+1,1:y+1]=olddata
使用np.insert或hstack,vstack,dstack添加值:
padded=np.insert(data,0,0,axis=0)
padded=np.insert(data,x+1,0,axis=0) etc.
问题是,所有这些方法都不是就地并分配新数组(1.)或复制旧数组(2.)。有没有办法在就地填充?我知道,自从numpy 1.7。有numpy.pad模块。但这似乎也使用了某种分配和覆盖(就像在我的方式中一样)。
答案 0 :(得分:1)
您无法就地添加填充,因为内存布局中没有空间。您可以采用另一种方式:首先分配填充数组,并在访问未填充数据时使用视图。
padded = np.empty((2002,2002,2002))
padded[0] = 0
padded[-1] = 0
padded[:,0] = 0
padded[:,-1] = 0
padded[:,:,0] = 0
padded[:,:,-1] = 0
unpadded = padded[1:-1, 1:-1, 1:-1]