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

[dennou-ruby:000108] Re: NMDArray revised



In message "[dennou-ruby:000107] Re: NMDArray revised"
    on 99/10/05, Takeshi Horinouchi <horinout@xxxxxx> writes:
>>> 意味がわからないのですが、これって、a,b が配列だとするとRubyでは
>>> 
>>> c = []
>>> a.each_indeces{|i| c[i] = a[i] * b[i] if a[i] > 0}
>>> a = c
>>> 
>>> みたいな感じですか??
>
>そうです。
>そうか、インデックスを対象に同様のメソッドを作ればいいんですね。

ただ、上の例ですらブロック内に [i] が4回も出てくるというわず
らわしさはあります。例えば、引数のnilなところをselfで上書き
するメソッドover を定義して、

a
 ==> [1.2, -3.4, 56.7, -0.9]
a.mask{|elm| elm > 0}
 ==> [1.2, nil, 56.7, nil]
2*a
 ==> [2.4, -6.8, 113.4, -1.8]
a = (2*a).over a.mask{|e| e > 0}
 ==> [1.2, -6.8, 56.7, -1.8]

みたいな手もあるかも知れません。a*b なら

a = (a*b).over a.mask{|e| e>0}

分かりにくいですか?? ただこれだと余分な計算が多いんですよね。

-- gotoken