What does the ismatrix function do in MATLAB / RunMat?
ismatrix(A) returns logical true when the input has two dimensions (m-by-n) and logical false
otherwise. Scalars and vectors are considered matrices because they occupy a 1-by-1 or 1-by-n grid.
The builtin mirrors MATLAB semantics across numeric, logical, character, string, cell, struct, and GPU-resident data.
How does the ismatrix function behave in MATLAB / RunMat?
- Returns
truefor scalars, row vectors, column vectors, and ordinary 2-D matrices. - Returns
falsefor arrays whose rank exceeds two, even if trailing dimensions are singleton (for example,1×1×1). - Empty arrays such as
0×0,1×0, and0×1are matrices; higher-rank empties such as0×0×3are not. - Character arrays, string arrays, and cell arrays honor their reported MATLAB dimensions.
- GPU tensors rely on their
GpuTensorHandlemetadata; if a provider omits the shape, RunMat gathers once to inspect it. - Objects, structs, numeric scalars, and logical scalars behave like their underlying dimensions (
1×1).
ismatrix Function GPU Execution Behaviour
ismatrix never launches GPU kernels. For gpuArray inputs, the builtin first inspects the shape metadata stored
inside the GpuTensorHandle. Providers such as the WGPU backend fully populate that metadata so no data transfer occurs.
If metadata is absent, RunMat gathers the tensor once to recover its dimensions and then evaluates the predicate on the host.
The result is always a host logical scalar, so fusion treats ismatrix as a metadata query rather than a device-side operation.
GPU residency in RunMat (Do I need gpuArray?)
You do not need to move data between host and device to call ismatrix. The builtin respects existing residency and only
downloads data when the provider fails to report shapes. Users who prefer MATLAB-compatible workflows can still call gpuArray
explicitly, but it is not required for this metadata check.
Examples of using the ismatrix function in MATLAB / RunMat
Confirming that a 2-D matrix returns true
tf = ismatrix([1 2 3; 4 5 6]);
Expected output:
tf = logical(1)
Showing that vectors and scalars count as matrices
scalar_tf = ismatrix(42);
row_tf = ismatrix(1:5);
col_tf = ismatrix((1:5)');
Expected output:
scalar_tf = logical(1)
row_tf = logical(1)
col_tf = logical(1)
Detecting that higher-dimensional arrays are not matrices
tf = ismatrix(ones(2,2,3));
Expected output:
tf = logical(0)
Working with empty arrays
tf_empty = ismatrix([]);
tf_row0 = ismatrix(zeros(1,0));
tf_col0 = ismatrix(zeros(0,1));
tf_3d_empty = ismatrix(zeros(0,0,3));
Expected output:
tf_empty = logical(1)
tf_row0 = logical(1)
tf_col0 = logical(1)
tf_3d_empty = logical(0)
Character and string arrays follow their visible dimensions
tf_char = ismatrix('RunMat');
tf_string = ismatrix(["a","b","c"]);
Expected output:
tf_char = logical(1)
tf_string = logical(1)
Cell and struct arrays respect their grid layout
C = {1, 2; 3, 4};
S = repmat(struct("field", 1), 1, 3, 1);
tf_cell = ismatrix(C);
tf_struct = ismatrix(S);
Expected output:
tf_cell = logical(1)
tf_struct = logical(0)
Inspecting GPU arrays without explicit gathers
G = gpuArray(rand(4,4));
tf_gpu = ismatrix(G);
Expected output:
tf_gpu = logical(1)
FAQ
Does ismatrix treat scalars as matrices?
Yes. Scalars occupy a 1-by-1 grid, which is a valid two-dimensional matrix in MATLAB semantics.
Are vectors considered matrices?
Yes. Row and column vectors are 1-by-N and N-by-1 matrices, so ismatrix returns true.
Do trailing singleton dimensions change the result?
Yes. Any array whose rank exceeds two returns false, even if the extra dimensions are size one (for example, 1×1×1).
How are empty arrays handled?
Empty arrays with at most two dimensions (such as 0×0, 1×0, or 0×1) return true. Higher-rank empties return false.
What about character, string, or cell arrays?
They follow their MATLAB-visible dimensions. A character row vector or 1-by-N string array returns true, whereas a 1-by-1-by-N cell array returns false.
Will ismatrix download GPU data?
Only when the active provider fails to populate shape metadata on the GpuTensorHandle. Providers that supply the shape avoid any data transfer.
Does ismatrix participate in fusion or GPU kernels?
No. The builtin is a metadata query, always returns a host logical scalar, and never dispatches GPU work.
How does ismatrix relate to isvector and isscalar?
isscalar(A) and isvector(A) both imply ismatrix(A) because they describe special cases of 2-D arrays. The reverse implication does not necessarily hold.
Are objects and structs supported?
Yes. Objects and structs are treated as 1-by-1 unless they represent arrays of instances, in which case the reported dimensions determine the answer.
Does sparse support change the behaviour?
Future sparse tensors will report their dimensions through the same metadata, so the ismatrix predicate will remain unchanged.