fill — Create MATLAB arrays filled with a constant value.
fill(value, size, ...) constructs dense MATLAB arrays whose entries are all the supplied value. It aligns with the MATLAB-compatible RunMat array creation suite (zeros, ones, eye, etc.) while supporting GPU residency, 'like' prototypes, and logical/complex outputs.
How does the fill function behave in MATLAB / RunMat?
fill(v)returns the scalarv.fill(v, n)returns ann × nmatrix with every element equal tov.fill(v, m, n, ...)supports arbitrary N-D dimensions.fill(v, sz)accepts a size vector (row or column).fill(v, A)uses the shape (and default type) ofA.fill(v, ___, 'logical')produces a logical array where each element isv ~= 0.fill(v, ___, 'like', prototype)matches the type, device residency, and shape ofprototype.- When a GPU prototype or
'like'argument is provided, RunMat keeps the result on the device. When provider hooks are incomplete, it falls back to uploading a host tensor to guarantee correctness.
GPU behavior
RunMat asks the active acceleration provider to materialise the constant directly via the dedicated fill hook. Providers that do not supply this capability fall back to a zero buffer plus scalar add or, as a last resort, upload the fully materialised host tensor. This guarantees MATLAB-compatible results while still benefiting from GPU residency whenever possible.
GPU residency
A = rand(512, 512);
J = fill(0.5, size(A), 'like', gpuArray(A));Expected output:
isa(J, 'gpuArray') % trueExamples of using fill in MATLAB / RunMat
Creating a 3x3 matrix of 2.5s
A = fill(2.5, 3)Expected output:
A = [2.5 2.5 2.5; 2.5 2.5 2.5; 2.5 2.5 2.5]Filling a rectangular matrix with -4
B = fill(-4, 2, 5)Expected output:
B = [-4 -4 -4 -4 -4; -4 -4 -4 -4 -4]Filling using a size vector
sz = [2 3 4];
C = fill(10, sz)Expected output:
size(C) % 2-by-3-by-4Creating a logical mask with fill
mask = fill(3, 4, 1, 'logical')Expected output:
mask = [1; 1; 1; 1]Matching an existing array with 'like'
prototype = rand(2, 3, 'like', gpuArray(1));
D = fill(pi, 2, 3, 'like', prototype);
gather(D)Expected output:
3.1416 3.1416 3.1416 3.1416 3.1416 3.1416Filling a complex array
E = fill(1 + 2i, 2, 2, 'complex')Expected output:
E = [1+2i 1+2i; 1+2i 1+2i]Using a prototype to infer shape automatically
F = rand(4, 2);
G = fill(7, F)Expected output:
isequal(size(G), [4 2]) % trueFilling an empty matrix
H = fill(0, 0, 5)Expected output:
size(H) % 0-by-5Keeping GPU residency without explicit gpuArray
A = rand(512, 512);
J = fill(0.5, size(A), 'like', gpuArray(A))Expected output:
isa(J, 'gpuArray') % trueFilling with boolean semantics
K = fill(false, [2 2], 'logical')Expected output:
K = [0 0; 0 0]FAQ
Which argument order does fill support?
The first argument is always the scalar value. Remaining arguments specify dimensions, size vectors, or options ('logical', 'like', 'double', 'complex').
Does fill accept non-scalar values?
No. The fill value must be numeric, logical, or complex scalar. Use repmat when you need to tile an array.
How does fill behave with complex values?
If you request complex output (explicitly or via 'like'), the real and imaginary parts are copied verbatim. Otherwise the imaginary component must be zero.
How do logical arrays handle nonzero values?
Logical outputs treat any nonzero real or complex magnitude as true, matching MATLAB semantics.
Can I match GPU residency automatically?
Yes. Pass a GPU prototype via 'like' and fill will allocate on the device. It falls back to host allocation and upload when the provider cannot construct the constant directly.
What happens when I omit dimensions?
If you only pass the value, fill returns a scalar. When you pass a prototype (e.g., fill(v, A)), the prototype shape is reused. Otherwise RunMat follows MATLAB's default of 1 × 1.
Are string or char outputs supported?
Not yet. fill currently targets numeric, logical, and complex arrays. Use string-manipulation functions for text.
How do I create empty outputs?
Include a zero dimension (fill(value, 0, n) or fill(value, [0 n])). RunMat returns an empty array of the requested size and type.
Does fill honour 'single' outputs?
Single precision outputs are not implemented yet. The function returns an error mirroring other array creation builtins.
Is the GPU path deterministic?
Yes. Providers either execute the constant fill entirely on the GPU or RunMat uploads a deterministic host tensor, ensuring identical results.
See also
zeros, ones, repmat, gpuArray, gather
Source & Feedback
- Source code: `crates/runmat-runtime/src/builtins/array/creation/fill.rs`
- Found a bug? Open an issue with a minimal reproduction.