2012-02-09 3 views
5

का उपयोग करके बार्स या दाएं ओर लंगर के नीचे मूल्यों का चयन करना, नायर्रे का उपयोग करके, नीचे दिए गए मानों के साथ सरणी के मास्क बनाने के लिए कुछ निफ्टी तरीका है। 5, लेकिन केवल मूल्यों के रनों के लिए बाएं या दाएं तरफ लगाया गया, उदा। यह 1-डी सरणी:रूढ़ी नायर्रे

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

परिणाम होगा में:

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

और यह 2-डी सरणी:

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

परिणाम होगा में:

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

उत्तर

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

था nks। अति उत्कृष्ट। – maasha