RunMat
GitHub

vertcat — Concatenate inputs vertically along the first dimension with MATLAB semicolon semantics.

vertcat(A1, A2, ...) stacks inputs top-to-bottom along dimension 1, equivalent to MATLAB semicolon syntax [A1; A2; ...] with compatible shape rules.

Syntax

B = vertcat()
B = vertcat(A1, An...)

Inputs

NameTypeRequiredDefaultDescription
A1AnyYesFirst input array.
AnAnyVariadicAdditional input arrays.

Returns

NameTypeDescription
BAnyVertically concatenated result (dimension 1).

Errors

IdentifierWhenMessage
RunMat:vertcat:InvalidInputInputs are malformed or incompatible for vertical concatenation.vertcat: invalid input arguments
RunMat:vertcat:TypeMismatchInput classes cannot be concatenated together.vertcat: incompatible input classes for concatenation

How vertcat works

  • Hard-codes dim = 1. All inputs must agree on every dimension except the first.
  • Accepts numeric, logical, complex, character, string, and cell arrays with MATLAB-compatible type checking. Mixing classes is an error.
  • Scalars are treated as 1×1, enabling concise row-building such as vertcat(1, 2, 3).
  • Empty inputs participate naturally. If any shared dimension is zero, the result is empty with the expected shape.
  • The optional trailing 'like', prototype pair forces the output to match the prototype's data residency (CPU vs GPU) and numeric flavour.
  • Mixing gpuArray inputs with host inputs is disallowed. Convert explicitly via gpuArray or gather to control residency.

Does RunMat run vertcat on the GPU?

vertcat delegates to cat(dim = 1, …). When the active acceleration provider implements the cat hook, concatenation happens entirely on the GPU, keeping gpuArray inputs resident and avoiding costly round-trips. Providers that lack this hook trigger a transparent fallback: RunMat gathers the operands to the host, concatenates them with MATLAB semantics, and uploads the result back to the originating device so downstream code still sees a gpuArray. This mirrors MATLAB's explicit GPU workflows while keeping RunMat's auto-offload planner informed.

Examples

Stacking matrices by adding rows

A = [1 2; 3 4];
B = [5 6; 7 8];
C = vertcat(A, B)

Expected output:

C =
     1     2
     3     4
     5     6
     7     8

Building a column vector from scalars

col = vertcat(1, 2, 3, 4)

Expected output:

col =
     1
     2
     3
     4

Combining character arrays into taller text blocks

top = ['RunMat'];
bottom = ['Rocks!'];
banner = vertcat(top, bottom)

Joining string arrays into multi-row tables

header = ["Name" "Score"];
rows = ["Alice" "98"; "Bob" "92"];
table = vertcat(header, rows)

Preserving logical masks when stacking

mask1 = logical([1 0 1]);
mask2 = logical([0 1 0]);
stacked = vertcat(mask1, mask2)

Extending cell arrays downwards

row1 = {1, "low"};
row2 = {2, "high"};
grid = vertcat(row1, row2)

Keeping gpuArray inputs resident on the device

G1 = gpuArray(rand(128, 256));
G2 = gpuArray(rand(64, 256));
stacked = vertcat(G1, G2)

Requesting GPU output with the 'like' prototype

proto = gpuArray.zeros(1, 3);
result = vertcat([1 2 3], [4 5 6], "like", proto)

Working with empty rows without surprises

empty = zeros(0, 3);
combo = vertcat(empty, empty)

Stacking complex matrices preserves imaginary parts

z1 = complex([1 2], [3 4]);
z2 = complex([5 6], [7 8]);
joined = vertcat(z1, z2)

Using vertcat with coding agents

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

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

Shape

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

Sorting Sets

argsort · intersect · ismember · issorted · setdiff · sort · sortrows · union · unique

Creation

colon · eye · false · fill · linspace · logspace · magic · meshgrid · ones · peaks · rand · randi · randn · randperm · range · true · zeros

Indexing

find · ind2sub · sub2ind

Introspection

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

Open-source implementation

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

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.