RunMat
  • Pricing
RunMat
GitHub
GitHub
DownloadSign InTry in Browser
DesktopRuntimeServer
RunMat

Run math blazing fast

GitHubX (Twitter)LinkedIn

Company

  • About
  • Pricing
  • Contact
  • License
  • Privacy

Learn

  • Docs
  • Blog
  • Benchmarks
  • RunMat vs MATLAB Online

Get product updates and release notes from the RunMat team.

© 2026 Dystr · Made withfor the scientific community.

RunMat™ is a registered trademark of Dystr, Inc. MATLAB® is a registered trademark of The MathWorks, Inc. RunMat is not affiliated with, endorsed by, or sponsored by The MathWorks, Inc.

/
See all docs
Builtin Reference
    • fft
    • fft2
    • fftn
    • fftshift
    • ifft
    • ifft2
    • ifftn
    • ifftshift

fft2 — Compute two-dimensional discrete Fourier transforms in MATLAB and RunMat.

fft2(X) computes the two-dimensional discrete Fourier transform of X. It is equivalent to applying fft along the first two dimensions, with shape and ordering behavior consistent with MATLAB and RunMat.

Syntax

Y = fft2(X)
Y = fft2(X, SIZE)
Y = fft2(X, M, N)

Inputs

NameTypeRequiredDefaultDescription
XAnyYes—Input array.
SIZENumericArrayNo—RunMat-only scalar N or two-element [M N] size shorthand.
MNumericScalarNo—Positive output row count for transform.
NNumericScalarNo—Positive output column count for transform.

Returns

NameTypeDescription
YNumericArray2-D complex Fourier spectrum output.

Errors

IdentifierWhenMessage
RunMat:fft2:ArgCountMore than three input arguments are supplied.fft2: invalid argument count
RunMat:fft2:InvalidLengthLength/size arguments are invalid.fft2: invalid transform length argument
RunMat:fft2:InvalidSizeVectorSingle SIZE argument is invalid.fft2: invalid size vector argument
RunMat:fft2:InvalidInputInput cannot be converted to supported numeric/complex domain.fft2: invalid input
RunMat:fft2:InternalFFT2 execution or tensor shaping fails.fft2: internal error

How fft2 works

  • fft2(X) transforms along the first and second dimensions that have size greater than one.
  • fft2(X, M, N) zero-pads or truncates X to M rows and N columns before evaluating the 2-D transform.
  • RunMat extension: fft2(X, SIZE) accepts a two-element vector (or scalar) specifying the transform lengths when RunMat extensions are enabled.
  • Real inputs produce complex outputs; complex inputs are transformed element-wise with no additional conversion.
  • Higher-dimensional inputs are transformed slice-by-slice across trailing dimensions, matching MATLAB behaviour.
  • MATLAB-compatible M and N controls are positive integer scalars. Empty and zero transform sizes are separately gated RunMat extensions.
  • GPU arrays execute on-device when the provider advertises the fft_dim hook; otherwise RunMat gathers the data and performs the transform on the host using rustfft.

GPU memory and residency

You usually do NOT need to call gpuArray manually. The fusion planner and native acceleration layer keep tensors on the GPU when a provider offers FFT kernels. If the provider lacks fft_dim, RunMat gathers inputs, evaluates the FFT pair on the host, and returns a MATLAB-compatible complex tensor. You can still use gpuArray for explicit residency control, particularly when interoperating with MATLAB code that expects it.

Examples

Computing the 2-D FFT of a small matrix

X = [1 2; 3 4];
Y = fft2(X)

Expected output:

Y =
    10 + 0i   -2 + 0i
    -4 + 0i    0 + 0i

Zero-padding an image patch before fft2

patch = [1 0 1; 0 1 0; 1 0 1];
F = fft2(patch, 8, 8)

Specifying transform lengths with a size vector

X = rand(4, 6);
F = fft2(X, [8 4]);   % requires RunMat extension mode

Using fft2 on gpuArray data

G = gpuArray(rand(256, 256));
F = fft2(G);
R = gather(F)

Applying fft2 to each slice of a 3-D volume

V = rand(64, 64, 10);
spectra = fft2(V)

Verifying fft2 against sequential fft calls

X = rand(5, 7);
sequential = fft(fft(X, [], 1), [], 2);
direct = fft2(X)

Using fft2 with coding agents

Open a RunMat example with live inputs, then ask the agent to explain how fft2 changes the result.

Run a small fft2 example, explain the result, then change one input and compare the output.

FAQ

Is fft2(X) the same as fft(fft(X, [], 1), [], 2)?⌄

Yes. RunMat literally performs the two sequential transforms so the results match MATLAB exactly.

How do zero-length transform sizes behave?⌄

MATLAB-compatible mode requires positive M and N. RunMat extension mode can use 0 to produce a zero-sized complex tensor.

Can I use a single scalar for the size argument?⌄

In RunMat extension mode, fft2(X, K) is shorthand for fft2(X, [K K]). The documented compatibility forms are fft2(X) and fft2(X,M,N).

What happens when X has more than two dimensions?⌄

RunMat applies fft2 to every 2-D slice defined by the first two dimensions, leaving higher dimensions untouched.

Do I get complex outputs for real inputs?⌄

Always. Even when the imaginary parts are zero, outputs are stored as complex tensors to mirror MATLAB semantics.

Will fft2 run on the GPU automatically?⌄

Yes if the input's owning provider implements fft_dim for its storage class. Otherwise RunMat gathers to the host, performs the transform with rustfft, and restores the result to that provider.

Does fft2 normalise the output?⌄

No. Like MATLAB, the forward FFT leaves scaling untouched; use ifft2 for the inverse with 1/(M*N) scaling.

Can I mix [] with explicit sizes (e.g., fft2(X, [], 128))?⌄

This is a RunMat extension. MATLAB-compatible mode requires positive scalar M and N values.

Related Math functions

Fft

fft · fftn · fftshift · ifft · ifft2 · ifftn · ifftshift

Elementwise

abs · angle · bsxfun · complex · conj · double · erf · erfcinv · exp · expm1 · factorial · flintmax · gamma · gammaln · heaviside · hypot · idivide · imag · intmax · intmin · ldivide · log · log10 · log1p · log2 · minus · nextpow2 · plus · pow2 · power · rdivide · real · realmax · realmin · realsqrt · rescale · sign · single · sqrt · swapbytes · times · typecast · uint16 · uint32 · uint8

Trigonometry

acos · acosh · asin · asinh · atan · atan2 · atanh · cos · cosd · cosh · cospi · deg2rad · pol2cart · rad2deg · sin · sind · sinh · sinpi · tan · tand · tanh

Reduction

all · any · bounds · cummax · cummin · cumprod · cumsum · cumtrapz · diff · gradient · max · maxk · mean · median · min · mink · movmax · movmean · movmedian · movmin · movprod · movstd · movsum · movvar · nnz · prod · rms · std · sum · trapz · var

Structure

bandwidth · isdiag · ishermitian · issymmetric · istril · istriu · symrcm

Signal

blackman · butter · buttord · cheb2ord · conv · conv2 · deconv · downsample · envelope · filter · filtfilt · fir1 · freqz · gauspuls · hamming · hann · hilbert · periodogram · pulstran · pwelch · rectpuls · resample · sawtooth · sinc · spectrogram · square · tripuls · unwrap · upsample · zplane

Rounding

ceil · fix · floor · mod · rem · round

Factor

chol · decomposition · eig · eigs · lu · qr · svd

Solve

cond · det · inv · linsolve · norm · null · pinv · rank · rcond · rref · vecnorm

Optim

coneprog · fminbnd · fminunc · fsolve · fzero · integral · linprog · lsqcurvefit · lsqnonlin · optimoptions · optimset · quad · secondordercone

Ops

cross · ctranspose · dot · mldivide · mpower · mrdivide · mtimes · pagemtimes · pagetranspose · trace · transpose

Symbolic

digits · int · limit · piecewise · sym · syms · vpa

Interpolation

griddedInterpolant · interp1 · interp1q · interp2 · pchip · ppval · spline

Discrete

lcm · primes

Ode

ode15s · ode23 · ode45

Poly

polyder · polyfit · polyint · polyval · roots

Open-source implementation

Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how fft2 is executed, line by line, in Rust.

  • View the source for fft2 in Rust on GitHub
  • Learn how the RunMat runtime works
  • Found a bug? Open an issue with a minimal reproduction.

About RunMat

RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.

  • RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
  • Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.

Getting started · Benchmarks · Pricing

Download RunMat

Download RunMat for full performance, or use RunMat in your browser for zero setup.

Download RunMatOpen Sandbox
On this page
  • Syntax
  • Inputs
  • Returns
  • Errors
  • How fft2 works
  • GPU memory and residency
  • Examples
  • Computing the 2-D FFT of a small matrix
  • Zero-padding an image patch before fft2
  • Specifying transform lengths with a size vector
  • Using fft2 on gpuArray data
  • Applying fft2 to each slice of a 3-D volume
  • Verifying fft2 against sequential fft calls
  • Using fft2 with coding agents
  • FAQ
  • Related Math functions
  • Fft
  • Elementwise
  • Trigonometry
  • Reduction
  • Structure
  • Signal
  • Rounding
  • Factor
  • Solve
  • Optim
  • Ops
  • Symbolic
  • Interpolation
  • Discrete
  • Ode
  • Poly
  • Open-source implementation
  • About RunMat