隱式陣列擴充套件(廣播)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
與隱式陣列擴充套件計算的速度 。