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
    • colon
    • createArray
    • empty
    • eye
    • false
    • full
    • inf
    • linspace
    • logspace
    • magic
    • meshgrid
    • nan
    • nchoosek
    • ndgrid
    • nonzeros
    • ones
    • peaks
    • perms
    • rand
    • randi
    • randn
    • randperm
    • range
    • sparse
    • spdiags
    • speye
    • spones
    • sprand
    • true
    • zeros

meshgrid — Generate coordinate grids in MATLAB and RunMat.

meshgrid expands coordinate vectors into 2-D or 3-D coordinate arrays spanning rectangular grids. Output ordering and dimensional replication follow MATLAB semantics.

Syntax

[X,Y] = meshgrid(x)
[X,Y] = meshgrid(x, y)
[X,Y,Z] = meshgrid(x, y, z)
[X,Y] = meshgrid(x, "like", prototype)
[X,Y] = meshgrid(x, y, "like", prototype)
[X,Y,Z] = meshgrid(x, y, z, "like", prototype)

Inputs

NameTypeRequiredDefaultDescription
xNumericArrayYes—X-axis vector.
yNumericArrayYes—Y-axis vector.
zNumericArrayNo—Z-axis vector.
like_kwStringScalarYes"like"Like keyword.
prototypeLikePrototypeYes—Prototype controlling class/device residency.

Returns

NameTypeDescription
XNumericArrayGrid coordinates along X-axis.
YNumericArrayGrid coordinates along Y-axis.
ZNumericArrayGrid coordinates along Z-axis.

Returned values from meshgrid depend on how many outputs the caller requests.

Errors

IdentifierWhenMessage
—No axis vectors are provided.meshgrid: at least one input vector is required
—More than three axis vectors are provided.meshgrid: expected at most three input vectors
—The 'like' keyword is provided without a prototype argument.meshgrid: expected prototype after 'like'
—The 'like' keyword is provided multiple times.meshgrid: multiple 'like' specifications are not supported
—The 'like' keyword is in an invalid position or not final.meshgrid: 'like' must be the final argument
—A trailing option string is not recognized.meshgrid: unrecognised option
—Axis inputs are non-numeric or non-vector shapes.meshgrid: input argument must be numeric vector data
—The 'like' prototype is unsupported.meshgrid: prototypes must be numeric arrays
—Requested outputs exceed available outputs for provided axes.meshgrid: supports at most two outputs for 2-axis inputs and three for 3-axis inputs
—A third output is requested without supplying a Z-axis vector.meshgrid: third output requested but no Z vector was supplied
—Complex axis values cannot be represented in requested real output class.meshgrid: cannot represent complex values in a real output

How meshgrid works

  • meshgrid(x) is shorthand for [X, Y] = meshgrid(x, x). It produces square 2-D grids.
  • meshgrid(x, y) yields X of size length(y) × length(x) with rows copied from x, and Y of the same size with columns copied from y.
  • meshgrid(x, y, z) returns three outputs sized length(y) × length(x) × length(z), enabling 3-D volume visualisation.
  • Input vectors may be row or column vectors (or even scalars). Empty vectors propagate to empty grids of matching shape.
  • In runmat compatibility mode, complex axes are a RunMat extension and produce complex grids that preserve their values and precision.
  • Documented single and double GPU vectors keep outputs resident when an acceleration provider is active. Explicit real-integer gpuArray axes reject; automatically resident real-integer axes gather transparently and produce exact host grids. Paired-complex integer axes are a RunMat extension and preserve exact resident output.
  • In runmat compatibility mode, the RunMat-only 'like', prototype selector matches both residency and numeric class. Ordinary MATLAB-compatible calls preserve each corresponding input axis class, including all eight integer classes.

Does RunMat run meshgrid on the GPU?

When vector inputs already live on the GPU, RunMat uses provider reshape and repmat hooks so real and complex-interleaved axis grids can stay resident.

If provider-side construction is unavailable, RunMat gathers the 1-D axes, materialises the grids once on the host, and uploads real or complex-interleaved outputs whenever GPU residency is requested, preserving observable semantics.

Complex GPU outputs use RunMat's interleaved real/imaginary storage metadata, so downstream complex-aware GPU operations can consume them without an immediate gather.

GPU memory and residency

You usually do not need to wrap vectors with gpuArray manually. When the active acceleration provider supports uploads, RunMat keeps real and complex-interleaved outputs on the GPU. In runmat compatibility mode, the RunMat-only 'like', gpuArray(...) selector can request GPU output even when every input axis is host-resident.

Examples

Generating a square 2-D grid from one vector

x = -2:2;
[X, Y] = meshgrid(x)

Expected output:

X =
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2

Building a rectangular grid from two different vectors

x = [0 0.5 1.0];
y = [10 20];
[X, Y] = meshgrid(x, y)

Expected output:

X =
         0    0.5000    1.0000
         0    0.5000    1.0000

Y =
    10    10    10
    20    20    20

Creating a volumetric grid for 3-D plotting

u = -1:1;
v = 2:4;
w = linspace(0, 1, 5);
[U, V, W] = meshgrid(u, v, w);
size(U)

Expected output:

ans =
     3     3     5

Matching an existing GPU prototype

gx = gpuArray(single(linspace(-pi, pi, 4)));
gy = gpuArray(single([-1 0 1]));
[Xg, Yg] = meshgrid(gx, gy)

Matching grid storage to a prototype

proto = gpuArray.zeros(1, 1, 'double');
angles = linspace(0, 2*pi, 8);
radius = [0 1 2];
[X, Y] = meshgrid(angles, radius, 'like', proto)

Creating grids from complex axes

z = [1+1i, 2+4i];
[Zx, Zy] = meshgrid(z)

Using meshgrid with coding agents

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

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

FAQ

How many inputs can meshgrid accept?⌄

One, two, or three numeric vectors. Use three inputs when you need volumetric (3-D) grids.

Can I request three outputs with only one or two inputs?⌄

No. RunMat follows MATLAB and requires three input vectors when three outputs are requested.

Do row or column vectors behave differently?⌄

No. Any vector shape (row, column, or scalar) is accepted. RunMat treats the linearised data identically and replicates it along the appropriate axes.

What happens with empty vectors?⌄

Empty inputs propagate to empty outputs. For example, meshgrid([], 1:3) returns 0×3 grids for both outputs.

Can I use integer vectors?⌄

Yes. Each output preserves the class of its corresponding input axis, including exact values from all eight integer classes.

Does meshgrid support complex numbers?⌄

Complex axes are a RunMat-only extension available in runmat compatibility mode. Their imaginary components and precision propagate to complex outputs, including exact paired-integer components and complex-interleaved GPU output when a provider is active.

What does 'like' do?⌄

It is a RunMat-only selector available in runmat compatibility mode. It matches the numeric class and residency of the prototype array; ordinary MATLAB-compatible code controls class and residency through the input axes.

How can providers avoid the host fall-back?⌄

Implement the meshgrid custom hook in the acceleration provider. RunMat will automatically dispatch to it once available.

Is the output always dense?⌄

Yes. meshgrid produces dense arrays. Use ndgrid when you need permuted axes or higher-dimensional grids beyond three inputs.

What error do I get if I omit all inputs?⌄

RunMat raises the MATLAB-compatible error meshgrid: at least one input vector is required.

Related Array functions

Creation

colon · createArray · empty · eye · false · full · inf · linspace · logspace · magic · nan · nchoosek · ndgrid · nonzeros · ones · peaks · perms · rand · randi · randn · randperm · range · sparse · spdiags · speye · spones · sprand · true · zeros

Grouping

accumarray · combinations · discretize · findgroups · groupcounts · grp2idx · splitapply

Sorting Sets

argsort · intersect · ismember · ismembertol · issorted · issortedrows · setdiff · setxor · sort · sortrows · union · unique

Shape

blkdiag · cat · circshift · diag · flip · fliplr · flipud · horzcat · ipermute · kron · permute · repelem · repmat · reshape · rot90 · squeeze · toeplitz · tril · triu · vertcat

Indexing

find · ind2sub · sub2ind

Introspection

iscolumn · isempty · ismatrix · isrow · isscalar · isvector · length · ndims · numel · size

Open-source implementation

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

  • View the source for meshgrid 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 meshgrid works
  • Does RunMat run meshgrid on the GPU?
  • GPU memory and residency
  • Examples
  • Generating a square 2-D grid from one vector
  • Building a rectangular grid from two different vectors
  • Creating a volumetric grid for 3-D plotting
  • Matching an existing GPU prototype
  • Matching grid storage to a prototype
  • Creating grids from complex axes
  • Using meshgrid with coding agents
  • FAQ
  • Related Array functions
  • Creation
  • Grouping
  • Sorting Sets
  • Shape
  • Indexing
  • Introspection
  • Open-source implementation
  • About RunMat