2

別のnumpy配列処理の質問:私は約を持っています。2000³ エントリの固定サイズ (私が知っている) の numpy 配列で、整数が含まれています。配列を別の整数でパディングして、すべての次元で囲まれるようにします。この整数は、パディング プロセス全体で固定されています。

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

その結果につながる 2 つのアイデアがあります。

  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 モジュールがあります。しかし、それはある種の割り当てとオーバーライドも使用しているようです(私の方法のように)。

4

1 に答える 1

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]
于 2013-04-10T12:31:40.797 に答える