File Exchange

image thumbnail

Embiggen

version 1.0.0.0 (2.65 KB) by Patrick Mineault
Add (or multiply, divide, etc) a matrix A to a vector b with the simple syntax A + Embiggen(b)

0 Downloads

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:
max(A,Embiggen(b))
min(A,Embiggen(b))
rem(A,Embiggen(b))
mod(A,Embiggen(b))
atan2(A,Embiggen(b))
hypot(A,Embiggen(b))

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 (2019). Embiggen (https://www.mathworks.com/matlabcentral/fileexchange/27603-embiggen), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (2)

Ian

David Young

MATLAB Release Compatibility
Created with R2008a
Compatible with any release
Platform Compatibility
Windows macOS Linux
Acknowledgements

Inspired by: bsxops