MATLAB bsxfun Function

Sep. 29, 2022

Syntax

MATLAB中的bsxfun函数用于:Apply element-wise operation to two arrays with implicit expansion enabled。其基本语法是:

1
C = bsxfun(@(x, y) func, A, B)
  • @(x, y) func表示一个匿名函数,xy是匿名函数的形参;
  • AB分别是匿名函数形参xy的具体取值;
  • C是返回的向量(或者矩阵)。


Examples

Example 1: A, 1-by-n; B, 1-by-n

如果AB都是具有4个元素的行向量,

image-20220929181926223

例如:

1
2
% A, 1-by-4; B, 1-by-4
C = bsxfun(@(a, b) a-b, [1, 2, 3, 4], [6, 9, 7, 10]);
1
2
C =
    -5    -7    -4    -6

Example 2: A, m-by-1; B, m-by-1

如果AB是具有3个元素的列向量;

image-20220929181957911

例如:

1
2
% A, 3-by-1; B, 3-by-1
C = bsxfun(@(a, b) a-b, [1, 2, 3]', [6, 9, 7]');
1
2
3
4
C =
    -5
    -7
    -4

Example 3: A, m-by-1; B, 1-by-n

如果A是具有3个元素的列向量,B是具有4个元素的行向量:

image-20220929182030416

例如:

1
2
% A, 3-by-1; B, 1-by-4
C = bsxfun(@(a, b) a-b, [1, 2, 3]', [6, 9, 7, 10]);
1
2
3
4
C =
    -5    -8    -6    -9
    -4    -7    -5    -8
    -3    -6    -4    -7

Example 4: A, 1-by-n; B, m-by-1

如果A是具有3个元素的行向量,B是具有4个元素的列向量:

image-20220929182119471

例如:

1
2
% A, 1-by-3; B, 4-by-1
C = bsxfun(@(a, b) a-b, [1, 2, 3], [6, 9, 7, 10]');
1
2
3
4
5
C =
    -5    -4    -3
    -8    -7    -6
    -6    -5    -4
    -9    -8    -7

注:这种情况的输出矩阵C就是上一种情况输出矩阵的转置。这种使用比比较得别扭,所以大部分情况都是使用上一种方式。


Usage for Plot Profiles with Different Parameters

使用bsxfun函数,可以比较简洁地绘制出不同参数的函数曲线。比如,绘制函数$y=e^{kx}$,其中$k$分别取1,2,3,4:

1
2
3
4
5
6
7
8
clc, clear, close all

xp = linspace(0, 1, 30);
ks = 1:4;
C = bsxfun(@(x, k) exp(k*x), xp', ks);
plot(repmat(xp', 1, numel(ks)), C, LineWidth=1.5);
legend('k=1', 'k=2', 'k=3', 'k=4', "Location", "best")
grid on

image-20220929184409017


参考

[1] bsxfun - MathWorks.