隐式阵列扩展(广播)R2016b
MATLAB R2016b 精选其标量膨胀的概括 1 , 2 机构,以同时支持之间的某些元件为单位的运算阵列不同的尺寸,只要它们的尺寸是兼容的。支持隐式扩展的运算符是 1 :
- 元素算术运算符:
+,-,.*,.^,./,.\。 - 关系运算符:
<,<=,>,>=,==,~=。 - 逻辑运算符:
&,|,xor。 - 按位功能:
bitand,bitor,bitxor。 - 小学数学函数:
max,min,mod,rem,hypot,atan2,atan2d。
只要阵列具有兼容大小,就允许在阵列之间进行上述二进制操作。当一个数组中的每个维度与另一个数组中的相同维度完全相等或者等于 1 时,大小被认为是兼容的。请注意,MATLAB 会省略尾随单例(即大小为 1)的尺寸,即使理论上它们的数量也是无限的。换句话说 - 出现在一个数组中但不出现在另一个数组中的维度隐式适合自动扩展。
例如,在 R2016b 之前的 MATLAB 版本中**,**这将发生:
>> magic(3) + (1:3)
Error using +
Matrix dimensions must agree.
而从 R2016b 开始之前的操作会成功:
>> magic(3) + (1:3)
ans =
9 3 9
4 7 10
5 11 5
兼容尺寸的示例:
| 描述 | 1 个 ST 数组大小 | 2 第二 数组大小 | 结果大小 |
|---|---|---|---|
| 矢量和标量 | [3x1] |
[1x1] |
[3x1] |
| 行和列向量 | [1x3] |
[2x1] |
[2x3] |
| 矢量和二维矩阵 | [1x3] |
[5x3] |
[5x3] |
| ND 和 KD 阵列 | [1x3x3] |
[5x3x1x4x2] |
[5x3x3x4x2] |
不兼容尺寸的示例:
| 描述 | 1 个 ST 数组大小 | 2 第二 数组大小 | 可能的解决方法 |
|---|---|---|---|
| 其中维度是另一个数组中相同维度的倍数的向量。 | [1x2] |
[1x8] |
transpose |
| 尺寸为彼此倍数的数组。 | [2x2] |
[8x8] |
repmat,reshape |
| ND 阵列具有适当数量的单一维度,但它们的顺序错误(#1)。 | [2x3x4] |
[2x4x3] |
permute |
| ND 阵列具有适当数量的单一维度,但它们的顺序错误(#2)。 | [2x3x4x5] |
[5x2] |
permute |
重要信息:
依赖此约定的代码不能与任何旧版本的 MATLAB 向后兼容。因此,bsxfun 明确调用 1 , 2 ,应使用(这达到同样的效果),如果代码需要运行在旧版本的 MATLAB。如果不存在这样的问题, MATLAB R2016 发行说明鼓励用户从 bsxfun 切换:
与使用
bsxfun相比,隐式扩展提供更快的执行速度,更好的内存使用和更高的代码可读性。
相关阅读:
- 关于“ 基本操作的兼容阵列大小 ”的 MATLAB 文档。
- NumPy 的广播 1 , 2 。
- 之间的比较使用
bsxfun与隐式阵列扩展计算的速度 。