2017-10-14 66 views
0

我需要插入任意数量的零来交替numpy数组的行和列。例如,假设我们想要在所有备用列和行中插入1零。将数值插入numpy数组中的交替行和列中

Input => [[ 1,2,3], 
      [ 4,5,6], 
      [ 7,8,9]] 

output => [[ 1,0,2,0,3], 
      [ 0,0,0,0,0], 
      [ 4,0,5,0,6], 
      [ 0,0,0,0,0], 
      [ 7,0,8,0,9]] 

我知道这可以通过使用循环来实现,但我不知道这是最有效的方式还是有一些量化的实现成为可能。

回答

4

一个与zeros-initialization和使用步骤大小的切片的方式分配 -

def insert_zeros(a, N=1): 
    # a : Input array 
    # N : number of zeros to be inserted between consecutive rows and cols 
    out = np.zeros((N+1)*np.array(a.shape)-N,dtype=a.dtype) 
    out[::N+1,::N+1] = a 
    return out 

样品试验 -

In [167]: a 
Out[167]: 
array([[83, 87, 19, 24], 
     [28, 24, 24, 77], 
     [26, 87, 57, 37]]) 

In [168]: insert_zeros(a, N=1) 
Out[168]: 
array([[83, 0, 87, 0, 19, 0, 24], 
     [ 0, 0, 0, 0, 0, 0, 0], 
     [28, 0, 24, 0, 24, 0, 77], 
     [ 0, 0, 0, 0, 0, 0, 0], 
     [26, 0, 87, 0, 57, 0, 37]]) 

In [169]: insert_zeros(a, N=2) 
Out[169]: 
array([[83, 0, 0, 87, 0, 0, 19, 0, 0, 24], 
     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [28, 0, 0, 24, 0, 0, 24, 0, 0, 77], 
     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [26, 0, 0, 87, 0, 0, 57, 0, 0, 37]])