flipud — Flip an array up-to-down along the first dimension.
flipud(A) mirrors A across its horizontal axis, reversing the order of rows (dimension 1). It works with scalars, vectors, matrices, N-D tensors, logical arrays, character arrays, string arrays, cell arrays, complex data, and gpuArray handles, matching MATLAB semantics.
Syntax
B = flipud(A)Ais a scalar, vector, matrix, or N-D array. It may hold any MATLAB class: numeric, logical, complex, character, string, or cell.gpuArrayinputs are supported and stay device-resident when the provider offers afliphook.Bis the same size and class asAwith its first dimension reversed:B(i, :, ...) = A(end - i + 1, :, ...). All other dimensions are preserved. For arrays with more than two dimensions, higher pages are treated independently.flipud(A)is equivalent toflip(A, 1). Usefliplr(A)to reverse columns instead, orflip(A, dim)when you need a dimension other than 1 or 2.
How flipud works
- Always reverses dimension 1 (rows) and leaves all other dimensions untouched, even for rank > 2 data.
- Inputs with a single row (row vectors, scalars) are returned unchanged because the first dimension is singleton.
- Numeric, logical, complex, character, string, and cell arrays all retain their MATLAB types, layout, and metadata (including UTF-16 code units for char arrays).
- gpuArray inputs execute on the device via the generic
flipprovider hook (axis = 0); when that hook is unavailable, RunMat gathers once, mirrors the data on the host, and uploads the result so the returned value is still a gpuArray. - Dimensions larger than
ndims(A)are treated as singleton axes, soflipudnever errors whenAhas rank < 1. - Behaviour matches
flip(A, 1)exactly;flipudis provided for readability and compatibility with existing MATLAB code.
How RunMat runs flipud on the GPU
RunMat first tries to execute flipud on the GPU by delegating to the provider’s generic flip implementation with axis 0 (zero-based). If the provider does not implement this hook, RunMat transparently gathers the tensor, performs the vertical flip on the host, and uploads the result back to the device so residency is preserved.
GPU memory and residency
You typically do not need to call gpuArray directly. RunMat’s auto-offload planner keeps tensors on the GPU when profitable and only gathers when a provider lacks the flip hook. Even in that fallback, flipud uploads the flipped result back to the device so subsequent operations remain gpu-resident.
Examples
Reverse Rows of a Matrix
A = [1 2 3; 4 5 6; 7 8 9];
B = flipud(A)Expected output:
B =
7 8 9
4 5 6
1 2 3Reverse a Column Vector
col = (1:4)';
rev = flipud(col)Expected output:
rev =
4
3
2
1Flip the First Dimension of a 3-D Tensor
T = reshape(1:24, [3 4 2]);
F = flipud(T)Expected output:
F(:,:,1) =
3 6 9 12
2 5 8 11
1 4 7 10
F(:,:,2) =
15 18 21 24
14 17 20 23
13 16 19 22Flip Characters in a Char Array Vertically
C = ['run'; 'mat'];
Cv = flipud(C)Expected output:
Cv =
'mat'
'run'Preserve Row Vector Orientation
row = 1:5;
same = flipud(row)Expected output:
same = [1 2 3 4 5]Keep gpuArray Results on the Device While Flipping Rows
G = gpuArray(rand(8, 8));
H = flipud(G);
isequal(gather(H), flipud(gather(G))) % illustrative verificationFAQ
Does flipud change row vectors?⌄
No. A row vector has a singleton first dimension, so reversing that axis leaves the data unchanged.
Is flipud the same as calling flip(A, 1)?⌄
Yes. flipud is a convenience wrapper around flip that always targets dimension 1 (rows).
Can I apply flipud to N-D tensors?⌄
Absolutely. Only dimension 1 is reversed; all other axes keep their original order regardless of rank.
Does flipud support string, character, and cell arrays?⌄
Yes. String arrays reorder their elements, character arrays mirror each column while preserving UTF-8 data, and cell arrays reverse their rows without copying contained values.
What happens on the GPU if there is no flip kernel?⌄
RunMat gathers the tensor once, mirrors it on the CPU, and uploads the result so you still receive a gpuArray.
Does flipud allocate new GPU buffers?⌄
Providers may reuse storage, but the builtin always returns a fresh handle. The simple provider uploads a new buffer.
Is flipud numerically stable?⌄
Yes. The function only reorders elements; values are never modified, so it is numerically stable.
What does flipud do in MATLAB?⌄
— B = flipud(A) returns A with the order of its rows reversed, so B(i, :) = A(end - i + 1, :). The number of columns and every higher-dimension page stays exactly the same.
What's the difference between flipud, fliplr, and flip?⌄
— flipud reverses dimension 1 (rows), fliplr reverses dimension 2 (columns), and flip(A, dim) reverses any dimension you pick. Modern MATLAB code tends to use flip(A, dim) directly; flipud and fliplr are convenience wrappers kept for readability.
How do I reverse a column vector?⌄
— For a column vector, flipud(v) returns the reversed vector. A dimension-agnostic idiom that works for row or column vectors is v(end:-1:1).
Related Array functions
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how flipud works, line by line, in Rust.
- View flipud.rs on GitHub
- Learn how the 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 — faster, on any GPU, with no license required.
- Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
- Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
- A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.