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 = 4x3 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
— 要应用的二元函数
函数句柄
要应用的二元函数,指定为函数句柄。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 |
| 按元素逻辑 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
必须具有兼容的大小。有关详细信息,请参阅基本运算的兼容数组大小。如果 A
或 B
的维度为单一维度(等于 1),bsxfun
实际上会沿该维度复制数组以便与另一个数组匹配。在 A
或 B
的维度为单一维度的情况下,并且另一数组中的对应维度为零,bsxfun
实际上会将单一维度降至零。
数据类型: single
| double
| uint8
| uint16
| uint32
| uint64
| int8
| int16
| int32
| int64
| char
| logical
复数支持: 是
提示
建议您将大部分使用
bsxfun
的情形替换为直接调用支持隐式扩展的函数和运算符。与使用bsxfun
相比,隐式扩展可提供更快的执行速度、更好的内存使用率以及改善的代码可读性。有关详细信息,请参阅基本运算的兼容数组大小。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅Run MATLAB Functions in Thread-Based Environment。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
请参阅
bsxfun
(Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2007a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)