2013-04-10 113 views
2

另一个numpy数组处理问题: 我有一个约。 2000³条目固定大小(我知道)的numpy数组,包含整数。我想用另一个整数填充数组,以便它包围所有维度。这个整数对于整个填充过程是固定的。填充大的numpy阵列

example (2D) 
1----->000 
     010 
     000 

我有两个想法,导致了这一结果:

  1. 创建一个更大的numpy的阵列,包含在填充填充的价值观和“切片”老区:

    padded=np.zeros((z+2,x+2,y+2)) 
    padded[1:z+1,1:x+1,1:y+1]=olddata 
    
  2. 使用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

你可以使用填充数组开始吗? – 2013-04-10 09:50:06

+0

@JanneKarila:我不知道如何开始填充数组?我有原始数据,有些时候我必须填补它,或者不是吗? – Dschoni 2013-04-10 11:17:33

+1

如何将原始数据转换为NumPy数组?也许你可以在那个时候将它读入填充内的一片。 – 2013-04-10 11:22:45

回答

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]