pylops
pylops copied to clipboard
Linear operator for Fast Welsh-Hadamard Transform
Interesting idea :) I wasn’t aware of this transform being available in sympy.
Just to be sure, I thought sympy works only with symbolic math, can this transform operate on numpy arrays too?
came across this...

but looking at sympy's implementation of FWHT, we can implement it in pylops...
def _walsh_hadamard_transform(seq, inverse=False):
"""Utility function for the Walsh Hadamard Transform"""
if not iterable(seq):
raise TypeError("Expected a sequence of coefficients "
"for Walsh Hadamard Transform")
a = [sympify(arg) for arg in seq]
n = len(a)
if n < 2:
return a
if n&(n - 1):
n = 2**n.bit_length()
a += [S.Zero]*(n - len(a))
h = 2
while h <= n:
hf = h // 2
for i in range(0, n, h):
for j in range(hf):
u, v = a[i + j], a[i + j + hf]
a[i + j], a[i + j + hf] = u + v, u - v
h *= 2
if inverse:
a = [x/n for x in a]
return a
I wasn’t really sure what @SilentEch0 meant and he never replied. I wouldn’t give priority to this issue unless it’s clear what is its value