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

[dennou-ruby:002330] NArrayMiss



西澤さま

竹広さんとのやりとりとは独立なんですが,
NArrayMiss に関しちょっと気づいた点がありまして,
以下お願いできないでしょうか.

* to_nam / to_nam_no_dup で NArray かどうかの判断を
  class == NArray でなく,is_a? 関係でやって欲しいです.
  NArray には NMatrix とか NArrayScalar などのサブクラスが
  あるので.たぶん,サブクラスでも問題ないことが多いんでは?
  この件は,簡単なので現在のcvs版に対するパッチを末尾につけます.

* 長さの違う NArrayMiss どうしの2項演算第一項めのほうが短い場合
  うまく行きません.ちょっとみたのですが,どうすればいいか良く分
  からなかったので,すみませんが対応して頂けると嬉しいです.以下,
  例です(cvs版利用).

% irb --simple-prompt
>> require "narray_miss"
=> true
>> na = NArray.sfloat(2,1).indgen!(10,10)
=> NArray.sfloat(2,1): 
[ [ 10.0, 20.0 ] ]
>> nb = NArray.sfloat(2,2).indgen!
=> NArray.sfloat(2,2): 
[ [ 0.0, 1.0 ], 
  [ 2.0, 3.0 ] ]
>> na+nb
=> NArray.sfloat(2,2): 
[ [ 10.0, 21.0 ], 
  [ 12.0, 23.0 ] ]
>> nb+na
=> NArray.sfloat(2,2): 
[ [ 10.0, 21.0 ], 
  [ 12.0, 23.0 ] ]
>> nam = NArrayMiss.to_nam(na)
=> NArrayMiss.sfloat(2,1):
[ [ 10.0, 20.0 ] ]
>> nbm = NArrayMiss.to_nam(nb)
  => NArrayMiss.sfloat(2,2):
[ [ 0.0, 1.0 ], 
[ 2.0, 3.0 ] ]
>> nbm+nam
  => NArrayMiss.sfloat(2,2):
[ [ 10.0, 21.0 ], 
[ 12.0, 23.0 ] ]
>> nam+nbm
TypeError: self.size(=4) != mask.size(=2)
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:303:in `[]='
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:303:in `set_without_validation'
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:1321:in `routine2'
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:394:in `+'
        from (irb):9
>> nc = NArray.sfloat(1).fill!(100)
=> NArray.sfloat(1): 
[ 100.0 ]
>> ncm = NArrayMiss.to_nam(nc)
=> NArrayMiss.sfloat(1):
[ 100.0 ]
>> nc + nb
=> NArray.sfloat(2,2): 
[ [ 100.0, 101.0 ], 
  [ 102.0, 103.0 ] ]
>> ncm + nbm
TypeError: self.size(=4) != mask.size(=1)
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:303:in `[]='
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:303:in `set_without_validation'
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:1321:in `routine2'
        from /usr/local/lib/ruby/site_ruby/1.8/narray_miss.rb:394:in `+'
        from (irb):8

# しかし,なんでタイプエラー?

毎度すみませんが,よろしくお願い致します.

堀之内

---- diff -u narray_miss.rb~ narray_miss.rb で作ったパッチ (ここから)----
--- narray_miss.rb~     Thu May 26 15:14:47 2005
+++ narray_miss.rb      Thu Jun 16 22:17:09 2005
@@ -167,7 +167,7 @@
     array = arg[0]
     if Numeric===array then array = NArray[array] end
     if array.class == Array then array = NArray.to_na(array) end
-    if array.class != NArray then
+    if !array.is_a?(NArray) then
       raise("argument must be Numeric, NArray or Array")
     end
 
@@ -195,7 +195,7 @@
     __new__(array,mask)
   end
   def self.to_nam(*arg)
-    if !(Numeric===arg[0]) && arg[0].class!=Array && arg[0].class!=NArray
+    if !(Numeric===arg[0]) && arg[0].class!=Array && !arg[0].is_a?(NArray)
       raise "first argument must be Numeric, NArray or Array"
     end
     arg[0] = arg[0].dup if !(Numeric===arg[0])
---- diff -u narray_miss.rb~ narray_miss.rb で作ったパッチ (ここまで)----