2012-02-09 2 views
5

NArray를 사용하면 다음과 같은 값을 갖는 배열의 마스크를 만드는 멋진 방법이 있습니다. 예를 들어,도 5에 도시 된 바와 같이, 좌측 또는 우측 측면에 앵커 된 값의 런에 대해서만, 예를 들어, 이 1-D 어레이 :임계 값보다 낮은 값을 선택하고 Ruby NArray를 사용하여 왼쪽 또는 오른쪽에 고정합니다.

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

가 초래 물 :

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

그리고이 2-D 어레이 :

[[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

관련 문제