Add (or multiply, divide, etc) a matrix A to a vector b with the simple syntax A + Embiggen(b)
Updated 13 May 2010

View License

Embiggen is a class that makes Matrix-vector operations easier by virtually matching the size of a vector b to the size of amatrix A. This allows for such code as:

C = A + Embiggen(b)

Here A is a matrix (for example of size 100x50)
b is a vector (for example of size 100x1)

And the equation is understood as (in index notation)
C_ij = A_ij + b_j

Which is more readable than the alternatives:

C = A + b*ones(1,size(A,2));
C = A + repmat(b,1,size(A,2));
C = bsxfun(@plus,A,b);

Under the hood the "big matrix B" is never actually created, as bsxfun is used; however Embiggen avoids the ackward reverse polish notation style of bsxfun .

A neat example:

%Center and scale columns of a matrix
A = randn(50,60);
A = A - Embiggen(mean(A));
A = A ./ Embiggen(std(A));

mean(A) %vector of zeros
std(A) %vector of ones

The following operators are implemented:

A + Embiggen(b)
A - Embiggen(b)
A .* Embiggen(b)
A ./ Embiggen(b)
A .\ Embiggen(b)

And the logical operations:

A == Embiggen(b)
A ~= Embiggen(b)
A < Embiggen(b)
A > Embiggen(b)
A <= Embiggen(b)
A >= Embiggen(b)
A & Embiggen(b)
A | Embiggen(b)
xor(A, Embiggen(b))

As well as the functions:

Embiggen also works between any two multidimensional arrays A and B as long as each dimension of A and B is equal to each other, or equal to one.

Embiggen does not redefine any core Matlab classes, unlike other solutions (for example bsxops).

Cite As

Patrick Mineault (2024). Embiggen (https://www.mathworks.com/matlabcentral/fileexchange/27603-embiggen), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2008a
Compatible with any release
Platform Compatibility
Windows macOS Linux
Find more on Logical in Help Center and MATLAB Answers

Inspired by: bsxops

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes