2012-02-09 9 views
5

Korzystanie z NArray, czy istnieje sprytny sposób na tworzenie masek macierzy o wartościach poniżej? 5, ale tylko dla przebiegów wartości zakotwiczonych po lewej lub prawej stronie, np. to 1-D tablicy:Wybieranie wartości poniżej progu i zakotwiczenie po lewej lub prawej stronie przy użyciu Ruby NArray

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

spowodowałoby:

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

I 2-D tablicy:

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

spowodowałoby:

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

Odpowiedz

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. Doskonały. – maasha

Powiązane problemy