This has trouble when the numbers are close.

   3 ((]*=) + - % ^.@:%) 3.000000000000001
5.66667
   3 ((]*=!.0) + - % ^.@:%) 3.000000000000001
2.66667
   3 ((]*=) + - % ^.@:%) 3.00000000000001
5.96774
   3 ((]*=!.0) + - % ^.@:%) 3.00000000000001
2.96774
   3 ((]*=) + - % ^.@:%) 3.0000000000001
6
   3 ((]*=!.0) + - % ^.@:%) 3.0000000000001
3
   3 ((]*=) + - % ^.@:%) 3.000000000001
2.99967
   3 ((]*=!.0) + - % ^.@:%) 3.000000000001
2.99967
   3 ((]*=) + - % ^.@:%) 3.00000000001
3
   3 ((]*=!.0) + - % ^.@:%) 3.00000000001
3

Henry Rich

On 4/20/2014 1:52 PM, Roger Hui wrote:
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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to