Actually, according to the Wikipedia page you quoted, the log mean is defined to be the difference divided by the log of their quotient. In your L function, if I replace the difference of the logs by the (equivalent) log of the quotient,
L =: (]*=) + - % -&^. L3=: (]*=) + - % ^.@:% The problem of equal arguments is finessed, and is more efficient for having to compute only one log instead of two. 10 ts '(L |.)i.1e5' 0.0360588 5.24506e6 10 ts '(L3 |.)i.1e5' 0.00544869 5.24506e6 0 L3 i.10 0 0 0 0 0 0 0 0 0 0 (i.10) L3 0 0 0 0 0 0 0 0 0 0 0 L3~ i.10 0 1 2 3 4 5 6 7 8 9 On Sat, Apr 19, 2014 at 8:53 PM, Raul Miller <rauldmil...@gmail.com> wrote: > https://en.wikipedia.org/wiki/Logarithmic_mean defines logarithmic > mean as the the limit of difference of two numbers divided by the > difference of their (natural) logs. The limit is to deal with the case > where the two numbers are equal - in this case, we want an identity > function. > > I was tempted to implement logarithmic mean as > Lm=: (- % -&^.)^:~: > > But this has a problem with rank: > 2 Lm 2 > 2 > 2 3 Lm 3 2 > 2.4663 2.4663 > 2.4663 2.4663 > > I could solve this with ("0) but that strikes me as inefficient. > L2=: (- % -&^.)^:~:"0 > > So, instead: > L=: (]*=) + - % -&^. > > ((L-:L2) |.) i.1e5 > 1 > > Is that worth it? > > timespacex '(L |.) i.1e5' > 0.0365999 5.24506e6 > timespacex '(L2 |.) i.1e5' > 0.0828581 3.14982e6 > > Probably... > > A caution, though: > 0 L 0 > |NaN error: L > > Because: > ^. 0 > __ > > So maybe the explicit rank implementation isn't such a bad idea after all? > > Thanks, > > -- > Raul > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm