2017-10-14 9 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]] 

私は、これは、ループを使用することによって達成することができる方法を知っているが、私はそれが最も効率的な方法ですまたは可能ないくつかのベクトル化の実装があるかどうかわかりません。 zeros-initialization及び割り当てるステップサイズのスライスを用いた

答えて

4

一つのアプローチ -

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]]) 
関連する問題