bsxfun
对两个数组应用按元素运算(启用隐式扩展)
说明
示例
从矩阵 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 = 4×3 logical array
1 0 0
1 1 0
1 1 0
1 1 1
创建表示函数 的函数句柄。
fun = @(a,b) a - exp(b);
使用 bsxfun
将函数应用于向量 a
和 b
。bsxfun
函数将这些向量扩展为相同大小的矩阵,这是计算多个输入组合的 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)
形式的二元(两个输入)按元素函数,该函数接受具有兼容大小的数组 A
和 B
。有关详细信息,请参阅基本运算的兼容数组大小。fun
必须支持标量扩展,这样如果 A
或 B
是标量,则 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 |
| 按元素逻辑或 |
xor | 不适用 | 逻辑异 OR |
bitand | 不适用 | 按位 AND |
bitor | 不适用 | 按位 OR |
bitxor | 不适用 | 按位 XOR |
max | 不适用 | 二进制最大值 |
min | 不适用 | 二进制最小值 |
mod | 不适用 | 除后的模数 |
rem | 不适用 | 除后的余数 |
atan2 | 不适用 | 四象限反切线;以弧度表示结果 |
atan2d | 不适用 | 四象限反切线;以度表示结果 |
hypot | 不适用 | 平方和的平方根 |
示例: C = bsxfun(@plus,[1 2],[2; 3])
数据类型: function_handle
输入数组,指定为标量、向量、矩阵或多维数组。输入 A
和 B
必须具有兼容的大小。有关详细信息,请参阅基本运算的兼容数组大小。如果 A
或 B
的维度为单一维度(等于 1),bsxfun
实际上会沿该维度复制数组以便与另一个数组匹配。在 A
或 B
的维度为单一维度的情况下,并且另一数组中的对应维度为零,bsxfun
实际上会将单一维度降至零。
数据类型: single
| double
| uint8
| uint16
| uint32
| uint64
| int8
| int16
| int32
| int64
| char
| logical
复数支持: 是
提示
建议您将大部分使用
bsxfun
的情形替换为直接调用支持隐式扩展的函数和运算符。与使用bsxfun
相比,隐式扩展可提供更快的执行速度、更好的内存使用率以及改善的代码可读性。有关详细信息,请参阅基本运算的兼容数组大小。
扩展功能
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
bsxfun
函数支持 GPU 数组输入,但有以下用法说明和限制:
请参阅
bsxfun
(Parallel Computing Toolbox)。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2007a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)