2016-05-05 7 views
2

を配列要素を変更:numpyの:私は配列有する特定の位置で

array([[[[14, 59, 18, 92], 
    [91, 38, 58, 23], 
    [33, 52, 93, 68], 
    [19, 21, 50, 77]], 

    [[90, 37, 22, 55], 
    [56, 54, 10, 16], 
    [83, 20, 36, 3], 
    [84, 87, 85, 81]]], 

    [[[ 0, 45, 72, 5], 
    [49, 46, 94, 53], 
    [34, 51, 75, 8], 
    [27, 79, 35, 15]], 

    [[ 7, 86, 64, 31], 
    [12, 70, 89, 62], 
    [13, 63, 88, 25], 
    [39, 11, 26, 6]]]]) 

を私はまた、マスクBを有する:

array([[[[ 0., 0., 0., 1.], 
    [ 1., 0., 0., 0.], 
    [ 0., 1., 1., 0.], 
    [ 0., 0., 0., 0.]], 

    [[ 0., 0., 0., 0.], 
    [ 1., 0., 1., 0.], 
    [ 0., 0., 0., 0.], 
    [ 0., 1., 1., 0.]]], 

    [[[ 0., 0., 0., 0.], 
    [ 1., 0., 1., 0.], 
    [ 0., 0., 1., 0.], 
    [ 0., 1., 0., 0.]], 

    [[ 0., 1., 0., 0.], 
    [ 0., 0., 1., 0.], 
    [ 0., 1., 1., 0.], 
    [ 0., 0., 0., 0.]]]]) 

どのように配列Aのこれらの要素を変更することができ、マスクbのものに対応するか?特に

、Iは、配列cを有する:

array([[[[ 0, 1], 
    [ 2, 3]], 

    [[ 4, 5], 
    [ 6, 7]]], 

    [[[ 8, 9], 
    [10, 11]], 

    [[12, 13], 
    [14, 15]]]]) 

マスクBによって示される要素のみが追加されるように、私は、Cに追加できますか?あなたはbがブールマスクとして解釈した場合、非常に簡単です

(これは私が畳み込みニューラルネットワークのmax-プーリング層を介してエラーをbackpropagateするために行うために必要なものである)

答えて

4

b_mask = b.astype(bool) 
d = a.copy() 
d[b_mask] = a[b_mask] + c.ravel() 
d 

私のインプレース

array([[[[ 14, 59, 18, 92], 
     [ 92, 38, 58, 23], 
     [ 33, 54, 96, 68], 
     [ 19, 21, 50, 77]], 

     [[ 90, 37, 22, 55], 
     [ 60, 54, 15, 16], 
     [ 83, 20, 36, 3], 
     [ 84, 93, 92, 81]]], 


     [[[ 0, 45, 72, 5], 
     [ 57, 46, 103, 53], 
     [ 34, 51, 85, 8], 
     [ 27, 90, 35, 15]], 

     [[ 7, 98, 64, 31], 
     [ 12, 70, 102, 62], 
     [ 13, 77, 103, 25], 
     [ 39, 11, 26, 6]]]]) 

またはあなたがそれをしたい場合を与える:

b_mask = b.astype(bool) 
a[b_mask] = a[b_mask] + c.ravel() 
関連する問題