Embiggen
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).
引用格式
Patrick Mineault (2024). Embiggen (https://www.mathworks.com/matlabcentral/fileexchange/27603-embiggen), MATLAB Central File Exchange. 检索来源 .
MATLAB 版本兼容性
平台兼容性
Windows macOS Linux类别
标签
致谢
参考作品: bsxops
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!版本 | 已发布 | 发行说明 | |
---|---|---|---|
1.0.0.0 |