2012-02-09 14 views
5

kullanılarak solda veya sağda sabitlenerek NArray kullanılması, aşağıdaki gibi değerlere sahip dizilerden maskeler oluşturmanın güzel bir yolu var mıdır? 5, ama sadece sol veya sağ tarafa bağlanmış değerler akışı için, E.g. Bu 1-D dizi:Bir eşiğin altındaki değerlerin seçilmesi ve Ruby NArray

[3, 4, 5, 7, 1, 7, 8] 

neden olur içinde:

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

ve bu 2-B dizisi:

[[2, 4, 5, 7, 1, 2, 3], 
[3, 4, 5, 7, 1, 7, 8], 
[8, 1, 1, 7, 1, 7, 1]] 

neden olur içinde:

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

cevap

2
require "narray" 

def anchor_mask(mask) 
    idx = (mask.not).where 
    y = idx/mask.shape[0] 
    u = (y[0..-2].ne y[1..-1]).where 
    t = [0] + (u+1).to_a + [idx.size] 
    s = (0..u.size).map{|i| idx[t[i]]..idx[t[i+1]-1]} 
    mask[s] = 0 
    return mask 
end 

a = NArray[3, 4, 5, 7, 1, 7, 8] 

p anchor_mask a.lt(5) 
#=> NArray.byte(7): 
# [ 1, 1, 0, 0, 0, 0, 0 ] 

a = NArray[[2, 4, 5, 7, 1, 2, 3], 
      [3, 4, 5, 7, 1, 7, 8], 
      [8, 1, 1, 7, 1, 7, 1]] 

p anchor_mask a.lt(5) 
#=> NArray.byte(7,3): 
# [ [ 1, 1, 0, 0, 1, 1, 1 ], 
#  [ 1, 1, 0, 0, 0, 0, 0 ], 
#  [ 0, 0, 0, 0, 0, 0, 1 ] ] 
+0

Tha nks. Mükemmel. – maasha

İlgili konular