Main Content

bsxfun

对两个数组应用按元素运算(启用隐式扩展)

说明

示例

C = bsxfun(fun,A,B) 对数组 AB 应用函数句柄 fun 指定的按元素二元运算。

示例

全部折叠

从矩阵 A 的对应列元素中减去列均值。然后,按标准差进行归一化。

A = [1 2 10; 3 4 20; 9 6 15];
C = bsxfun(@minus, A, mean(A));
D = bsxfun(@rdivide, C, std(A))
D = 3×3

   -0.8006   -1.0000   -1.0000
   -0.3203         0    1.0000
    1.1209    1.0000         0

在 MATLAB® R2016b 及更高版本中,您可以直接使用运算符而不是 bsxfun,因为这些运算符本身支持对具有兼容大小的数组进行隐式扩展。

(A - mean(A))./std(A)
ans = 3×3

   -0.8006   -1.0000   -1.0000
   -0.3203         0    1.0000
    1.1209    1.0000         0

将列向量和行向量中的元素进行比较。结果是一个矩阵,其中包含两个向量的每个元素组合的比较结果。此运算等效于使用 A > B

A = [8; 17; 20; 24]
A = 4×1

     8
    17
    20
    24

B = [0 10 21]
B = 1×3

     0    10    21

C = bsxfun(@gt,A,B)
C = 4x3 logical array

   1   0   0
   1   1   0
   1   1   0
   1   1   1

创建表示函数 f(a,b)=a-eb 的函数句柄。

fun = @(a,b) a - exp(b);

使用 bsxfun 将函数应用于向量 abbsxfun 函数将这些向量扩展为相同大小的矩阵,这是计算多个输入组合的 fun 的有效方法。

a = 1:7;
b = pi*[0 1/4 1/3 1/2 2/3 3/4 1].';
C = bsxfun(fun,a,b)
C = 7×7

         0    1.0000    2.0000    3.0000    4.0000    5.0000    6.0000
   -1.1933   -0.1933    0.8067    1.8067    2.8067    3.8067    4.8067
   -1.8497   -0.8497    0.1503    1.1503    2.1503    3.1503    4.1503
   -3.8105   -2.8105   -1.8105   -0.8105    0.1895    1.1895    2.1895
   -7.1205   -6.1205   -5.1205   -4.1205   -3.1205   -2.1205   -1.1205
   -9.5507   -8.5507   -7.5507   -6.5507   -5.5507   -4.5507   -3.5507
  -22.1407  -21.1407  -20.1407  -19.1407  -18.1407  -17.1407  -16.1407

输入参数

全部折叠

要应用的二元函数,指定为函数句柄。fun 必须为 C = fun(A,B) 形式的二元(两个输入)按元素函数,该函数接受具有兼容大小的数组 AB。有关详细信息,请参阅基本运算的兼容数组大小fun 必须支持标量扩展,这样如果 AB 是标量,则 C 为将该标量应用于另一输入数组中的每个元素的结果。

在 MATLAB® R2016b 和更高版本中,下表中列出的内置二元函数本身支持隐式扩展。借助这些函数,您可以直接调用函数或运算符,而不是使用 bsxfun。例如,您可以将 C = bsxfun(@plus,A,B) 替换为 A+B

函数符号描述
plus

+

minus

-

times

.*

数组乘法

rdivide

./

数组右除

ldivide

.\

数组左除

power

.^

数组幂

eq

==

等于

ne

~=

不等于

gt

>

大于

ge

>=

大于或等于

lt

<

小于

le

<=

小于或等于

and

&

按元素逻辑 AND

or

|

按元素逻辑 OR

xor

不适用

逻辑异 OR

bitand

不适用

按位 AND

bitor

不适用

按位 OR

bitxor

不适用

按位 XOR

max

不适用

二进制最大值

min

不适用

二进制最小值

mod

不适用

除后的模数

rem

不适用

除后的余数

atan2

不适用

四象限反切线;以弧度表示结果

atan2d

不适用

四象限反切线;以度表示结果

hypot

不适用

平方和的平方根

示例: C = bsxfun(@plus,[1 2],[2; 3])

数据类型: function_handle

输入数组,指定为标量、向量、矩阵或多维数组。输入 AB 必须具有兼容的大小。有关详细信息,请参阅基本运算的兼容数组大小。如果 AB 的维度为单一维度(等于 1),bsxfun 实际上会沿该维度复制数组以便与另一个数组匹配。在 AB 的维度为单一维度的情况下,并且另一数组中的对应维度为零,bsxfun 实际上会将单一维度降至零。

数据类型: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64 | char | logical
复数支持:

提示

  • 建议您将大部分使用 bsxfun 的情形替换为直接调用支持隐式扩展的函数和运算符。与使用 bsxfun 相比,隐式扩展可提供更快的执行速度、更好的内存使用率以及改善的代码可读性。有关详细信息,请参阅基本运算的兼容数组大小

扩展功能

版本历史记录

在 R2007a 中推出