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
表示一个匿名函数,x
和y
是匿名函数的形参;A
和B
分别是匿名函数形参x
和y
的具体取值;C
是返回的向量(或者矩阵)。
Examples
Example 1: A, 1-by-n; B, 1-by-n
如果A
和B
都是具有4个元素的行向量,
例如:
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
如果A
和B
是具有3个元素的列向量;
例如:
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个元素的行向量:
例如:
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个元素的列向量:
例如:
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
参考
[1] bsxfun - MathWorks.