However, on this Lenovo Windows 10 laptop,
also in a brief trial for q =: 128?10000, I find
Haar < hw ~= hw3 << applyHaar for time,
and
Haar < hw < hw3 << applyHaar for space - as on the iPad
(details below)
fwiw, I realised that the definition for the H2n matrix
required for Raul's ordering is similar in spirit to that
in the Wiki article:
H2 = [1 _1]
[1 1]
H2n = [In X [1 _1]]
[Hn X [1 1]]
where X is the (matrix) Kronecker Product.
So now I have:
H2n =: 3 : 0 NB. H2n as redefined above for Raul's ordering
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
)
It is fairly easy to define iH2n, the inverse of H2n to
allow a matrix-based inverse of applyHaar. I won't bore
you with it here.
Mike
brief timing details:
ts'Haar qk'
0.000101511 33920
ts'hw qk'
0.000178184 75776
ts'hw3 qk'
0.000169545 90880
ts'applyHaar qk'
0.104641 3.83121e7
On 07/01/2018 23:34, 'Mike Day' via Programming wrote:
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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm