本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

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

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 中推出