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

Run math blazing fast

GitHubX (Twitter)LinkedIn

Company

  • About
  • Pricing
  • Contact

Explore

  • RunMat for academia
  • RunMat vs MATLAB Online
  • Benchmarks

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.

LicensePrivacy
/
See all docs
Builtin Reference
    • blkdiag
    • cat
    • circshift
    • diag
    • flip
    • fliplr
    • flipud
    • horzcat
    • ipermute
    • kron
    • permute
    • repelem
    • repmat
    • reshape
    • rot90
    • squeeze
    • toeplitz
    • tril
    • triu
    • vertcat

rot90 — Rotate matrices and N-D arrays by 90-degree increments with MATLAB-compatible direction rules.

rot90(A) rotates A by 90 degrees counterclockwise, and an optional second argument specifies additional quarter-turns (positive for counterclockwise, negative for clockwise). For N-D arrays, rotation is applied to the first two dimensions while trailing dimensions are preserved.

Syntax

B = rot90(A)
B = rot90(A, k_or_direction)

Inputs

NameTypeRequiredDefaultDescription
AAnyYes—Input matrix or N-D array.
k_or_directionAnyYes—Rotation count K or direction string ('clockwise'/'counterclockwise').

Returns

NameTypeDescription
BAnyArray rotated by multiples of 90 degrees around dimensions 1 and 2.

Errors

IdentifierWhenMessage
RunMat:rot90:TooManyInputsMore than one optional rotation argument is provided.rot90: too many input arguments
RunMat:rot90:InvalidRotationRotation count/direction argument is invalid.rot90: invalid rotation argument
RunMat:rot90:UnsupportedInputInput value type is unsupported.rot90: unsupported input type
RunMat:rot90:InternalInternal rotation or provider fallback path fails.rot90: internal operation failed

How rot90 works

  • Default behaviour rotates 90 degrees counterclockwise (k = 1).
  • rot90(A, K) rotates by K * 90°; the rotation count can be positive, negative, or zero. Any integer multiple of four leaves the input unchanged.
  • The documented numeric K form accepts scalar integer values. RunMat mode also accepts the case-insensitive direction keywords 'clockwise' and 'counterclockwise'; strict MATLAB mode rejects that extension with RunMat:compatibility:Rot90DirectionTokenExtension.
  • Dense integer arrays retain their exact native class and values through every rotation, including uint64 values above the binary64 exactness limit.
  • Works for numeric tensors, logical masks, complex arrays, string arrays, and character matrices. Scalars are unchanged.
  • For empty dimensions the function still swaps the first two extents, so rot90(zeros(0, 3)) returns a 3×0 array.

Does RunMat run rot90 on the GPU?

Providers that implement both permute and flip can realise the rotation without leaving the GPU, preserving residency for downstream operations.

If a dedicated rot90 kernel is exposed the provider may call it instead of composing lower-level hooks.

When no compatible hooks are available, RunMat gathers the tensor once, rotates it on the host, and re-uploads the rotated tensor so subsequent GPU work continues without surprises.

GPU memory and residency

Not usually. The auto-offload planner keeps tensors on the GPU whenever it is profitable. Explicitly creating a gpuArray matches MATLAB syntax, but RunMat will also auto-promote host tensors when the planner determines that rotating them on the device avoids unnecessary transfers. When the active provider lacks native support the runtime downloads the tensor once, rotates on the host, and uploads the rotated tensor back to the GPU so downstream operations continue to benefit from residency information.

Examples

Rotating a matrix 90 degrees counterclockwise

A = [1 2 3; 4 5 6];
B = rot90(A)

Expected output:

B =
     3     6
     2     5
     1     4

Rotating a matrix clockwise using a direction keyword

A = magic(3);
C = rot90(A, 'clockwise')

Expected output:

C =
     6     1     8
     7     5     3
     2     9     4

Applying multiple 90-degree turns with a numeric count

A = reshape(1:9, [3 3]);
B = rot90(A, 2);    % 180-degree rotation

Expected output:

B =
     9     8     7
     6     5     4
     3     2     1

Rotating 3-D data while preserving trailing dimensions

T = reshape(1:12, [2 3 2]);
R = rot90(T);
size(R)

Expected output:

ans =
     3     2     2

Rotating character data to reorganise text

C = ['r','u','n'; 'm','a','t'; ' ','A','I'];
R = rot90(C)

Expected output:

R =
    'ntI'
    'uaA'
    'rm '

Rotating gpuArray data and keeping it on the device

G = gpuArray(reshape(1:9, [3 3]));
H = rot90(G, -1);     % rotate clockwise
isgpuarray(H)

Expected output:

ans = logical 1

Using rot90 with coding agents

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

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

FAQ

What directions does rot90 support?⌄

The compatibility surface uses an integer rotation count. RunMat mode also recognizes 'clockwise' and 'counterclockwise'; strict MATLAB mode rejects those direction tokens as a RunMat extension.

Does rot90 modify dimensions beyond the first two?⌄

No. Only the first two axes participate in the rotation. Other dimensions keep their order and extents unchanged.

What happens for empty matrices?⌄

Empty inputs still swap the first two dimension sizes. For example, a 0×5 matrix becomes 5×0 after a single counterclockwise rotation.

Can I rotate logical, string, or character arrays?⌄

Yes. Logical results remain logical, string arrays preserve their elements, and character matrices rotate their characters exactly like numeric data.

How do large rotation counts behave?⌄

The rotation count is reduced modulo 4. Values such as rot90(A, 37) behave the same as rot90(A, 1).

Is rot90 compatible with complex numbers?⌄

Absolutely. Complex tensors rotate without altering the real or imaginary parts; only the element positions change.

Can providers implement a custom kernel?⌄

Yes. Providers may implement a specialised rot90 kernel. When unavailable, the runtime composes the operation using the permute and flip hooks or falls back to the host implementation.

Related Array functions

Shape

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

Grouping

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

Sorting Sets

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

Creation

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

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 rot90 is executed, line by line, in Rust.

  • View the source for rot90 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 rot90 works
  • Does RunMat run rot90 on the GPU?
  • GPU memory and residency
  • Examples
  • Rotating a matrix 90 degrees counterclockwise
  • Rotating a matrix clockwise using a direction keyword
  • Applying multiple 90-degree turns with a numeric count
  • Rotating 3-D data while preserving trailing dimensions
  • Rotating character data to reorganise text
  • Rotating gpuArray data and keeping it on the device
  • Using rot90 with coding agents
  • FAQ
  • Related Array functions
  • Shape
  • Grouping
  • Sorting Sets
  • Creation
  • Indexing
  • Introspection
  • Open-source implementation
  • About RunMat