Article · Wikipedia archive · Last revised Jun 16, 2026

Fast Walsh–Hadamard transform

In computational mathematics, the Hadamard ordered fast Walsh–Hadamard transform (FWHTh) is an efficient algorithm to compute the Walsh–Hadamard transform (WHT). A naive implementation of the WHT of order would have a computational complexity of O(). The FWHTh requires only additions or subtractions.

Last revised
Jun 16, 2026
Read time
≈ 2 min
Length
394 w
Citations
2
Source
The fast Walsh–Hadamard transform applied to a vector of length 8 source ↗
Example for the input vector (1, 0, 1, 0, 0, 1, 1, 0) source ↗

In computational mathematics, the Hadamard ordered fast Walsh–Hadamard transform (FWHTh) is an efficient algorithm to compute the Walsh–Hadamard transform (WHT). A naive implementation of the WHT of order n = 2 m {\displaystyle n=2^{m}} would have a computational complexity of O( n 2 {\displaystyle n^{2}} ). The FWHTh requires only n log n {\displaystyle n\log n} additions or subtractions.

The FWHTh is a divide-and-conquer algorithm that recursively breaks down a WHT of size n {\displaystyle n} into two smaller WHTs of size n / 2 {\displaystyle n/2} . 1 This implementation follows the recursive definition of the 2 m × 2 m {\displaystyle 2^{m}\times 2^{m}} Hadamard matrix H m {\displaystyle H_{m}} :

H m = 1 2 ( H m 1 H m 1 H m 1 H m 1 ) . {\displaystyle H_{m}={\frac {1}{\sqrt {2}}}{\begin{pmatrix}H_{m-1}&H_{m-1}\\H_{m-1}&-H_{m-1}\end{pmatrix}}.}

The 1 / 2 {\displaystyle 1/{\sqrt {2}}} normalization factors for each stage may be grouped together or even omitted.

The sequency-ordered, also known as Walsh-ordered, fast Walsh–Hadamard transform, FWHTw, is obtained by computing the FWHTh as above, and then rearranging the outputs.

A simple fast nonrecursive implementation of the Walsh–Hadamard transform follows from decomposition of the Hadamard transform matrix as H m = A m {\displaystyle H_{m}=A^{m}} , where A is m-th root of H m {\displaystyle H_{m}} . 2

Python example code

import math
def fwht(a) -> None:
    """In-place Fast Walsh–Hadamard Transform of array a."""
    assert math.log2(len(a)).is_integer(), "length of a is a power of 2"
    h = 1
    while h < len(a):
        # perform FWHT
        for i in range(0, len(a), h * 2):
            for j in range(i, i + h):
                x = a[j]
                y = a[j + h]
                a[j] = x + y
                a[j + h] = x - y
        # normalize and increment
        a /= math.sqrt(2)
        h *= 2
See also

See also

References

References

  1. Fino, B. J.; Algazi, V. R. (1976). "Unified Matrix Treatment of the Fast Walsh–Hadamard Transform". IEEE Transactions on Computers. 25 (11): 1142–1146. doi:10.1109/TC.1976.1674569. S2CID 13252360.
  2. Yarlagadda and Hershey, "Hadamard Matrix Analysis and Synthesis", 1997 (Springer)
External links