[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003109] NArrayMiss#[] の masking 対応



神代です.

NArrayで, 

irb(main):001:0> require "narray_miss"
=> true
irb(main):002:0> a = NArray.int(5).indgen
=> NArray.int(5): 
[ 0, 1, 2, 3, 4 ]
irb(main):003:0> a[a.gt(2)]
=> NArray.int(2): 
[ 3, 4 ]

のようにして masking するのをよく使いますが, NArrayMiss の場合だと,

irb(main):004:0> b = NArrayMiss.int(5).indgen
=> NArrayMiss.int(5):
[ 0, 1, 2, 3, 4 ]
irb(main):005:0> b.invalidation(3)
=> NArrayMiss.int(5):
[ 0, 1, 2, -, 4 ]
irb(main):006:0> b[b.gt(2)]
IndexError: not allowed type
        from /usr/local/lib/site_ruby/1.8/narray_miss.rb:263:in `[]'
        from /usr/local/lib/site_ruby/1.8/narray_miss.rb:263:in `[]'
        from (irb):6

とエラーになります. 期待されるのは, 欠損のところは無視して

irb(main):006:0> b[b.gt(2)]
=> NArrayMiss.int(1):
[ 4 ]

のような結果だと思います. 以下のパッチでどうでしょうか.

# 現状でも b[b.gt(2).where] とすればできるのですが, NArray との整合性
# からこのようなこともできてほしいです


Attachment: narray_miss_masking.patch
Description: Binary data