In a brief trial for q =: 128?10000,  on this iPad,   I find 
hw3 < hw < Haar << applyHaar for time, 
and  
Haar < hw < hw3 << applyHaar for space.
(details below)

So the matrix method wins no prizes for performance,  although examining the 
matrices H2n and H2na might throw more light on the matter.

Cheers,

Mike

Brief details
   #~.q=:1024?100000
1024
   ts'hw3 q'
0.000214 94720
   ts'hw q'
0.000255 79616
   ts'Haar q'
0.000309 34432
   ts'applyHaar q'.  NB.  !!!!!
0.084739 3.83503e7


Sent from my iPad

> On 7 Jan 2018, at 22:44, Jimmy Gauvin <[email protected]> wrote:
> 
> I was playing with alternative ways to get to the result:
> 
> hw=: 3 : '; _2 -/\ each (-2^i.1+2^.#y) +/\ each < y'
> 
> hw3=: 3 : '_2 -/\ ; (-2^i.1+2^.#y) +/\ each < y'
> 
> 
> and I noticed that hw is faster even though it has an extra each.
> 
> Shouldn't hw3 be faster with less boxing and unboxing ?
> 
> 
> 
> As usual Raul' Haar is faster and consumes less memory.
> 
> 
> 
> On Sun, Jan 7, 2018 at 4:07 PM, 'Mike Day' via Programming <
> [email protected]> wrote:
> 
>> Not at all familiar with this,  but I played with the Matrices H2n in the
>> wiki
>> article,  and found they reproduce these results,  subject to reordering.
>> 
>> So, fwiw, here are a few verbs:
>> (I assume the argument size is a power (> 0) of 2; no checking!)
>> 
>> kp =:  *&$ ($,) 0 2 1 3 |: */   NB. Kronecker product from J Wiki
>> 
>> H2n =: 3 : 0    NB. H2n as defined in Wiki
>> n =. y
>> h =. 1 1,:1 _1
>> n2=. 2
>> for_i. i. <: 2 <.@^. n do.
>>   h =. (h kp ,:1 1) , (=i. n2) kp ,: 1 _1
>>   n2=. +:n2
>> end.
>> h
>> )
>> 
>> H2na =: 3 : 0  NB. H2n reordered to match Raul's Haar verb
>> i  =. i. n =. y
>> I  =. ''
>> while. 1 < n =. -: n do.NB. build map from Wiki H2n to required order
>>   i =. (-n) <\ i
>>   I =. I, ;{: i
>>   i =. ;}:  i
>> end.
>> (I,  |. i) { H2n y
>> )
>> 
>> applyHaar =: H2na@# +/ . * ]  NB. do matrix product
>> 
>>   Haar 3 2 3 2 2 2 1 1   NB. Raul's verb
>> 1 1 0 0 0 2 4 16
>>   applyHaar 3 2 3 2 2 2 1 1  NB. verb using H2n matrix
>> 1 1 0 0 0 2 4 16
>> 
>> Might help a bit!
>> 
>> Mike
>> 
>> 
>> 
>>> On 07/01/2018 17:41, Raul Miller wrote:
>>> 
>>> https://en.wikipedia.org/wiki/Haar_wavelet
>>> 
>>> https://pbs.twimg.com/media/DS7mmaLWAAE6-US.jpg
>>> 
>>>    Haar=: _2&(-/\ , Haar^:(1<#)@(+/\))
>>>    Haar 3 2 3 2 2 2 1 1
>>> 1 1 0 0 0 2 4 16
>>> 
>>> Like the fast fourier transform, this is only defined on arguments
>>> whose length is a power of 2 (which might be enforced by requiring an
>>> array whose dimensions are all 2 and then raveling it).
>>> 
>>> Unlike the FFT, however, the Haar transform is not self inverting.
>>> Still, since every non-lossey transform deserves an inverse transform:
>>> 
>>>    iHaar=: -:@(+/,@,.-~/)@(,:$:^:(1<#))/@($~ 2,-:@#)
>>>    iHaar 1 1 0 0 0 2 4 16
>>> 3 2 3 2 2 2 1 1
>>> 
>>> As an aside, though: I found the wikipedia article nearly useless for
>>> this implementation - I used the example contained in the image to
>>> write this code and only briefly skimmed the wikipedia text for rough
>>> agreement. (And since I've encountered plenty of errors in wikipedia
>>> in the past, that's all I'm inclined to do with that page at the
>>> moment.) Still, if someone with more familiarity with wavelets than I
>>> could tell me if I've screwed up royally (and, if so, how and where),
>>> please let me know.
>>> 
>>> Thanks,
>>> 
>>> 
>> 
>> ---
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>> 
>> 
>> ----------------------------------------------------------------------
>> 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