python庫之numpy(三)
最新
01-15
broadcasting是個很有用的機制,可以讓numpy中的數組工作在不同的shape上。通常會有兩個大小不一樣的數組,我們會想用小數組來表示作用在大數組上的乘積次數。
比如,如果想要在矩陣的每行加上一個常量向量,可以按如下方式:
上面的方式是ok的,但是當x很大的時候,循環計算在python中是特別低效的。下面給出更高效的方式。
numpy的broadcasting可以有不需要多維複製向量v的方式,以下是例子:
儘管x的維度是(4,3),v的維度是(3,),代碼y = x + v 是可以藉助broadcasting成功運行的。實質上,只有v的維度也是(4,3)才可以成功執行,其中v的每一行都是原來v的一個副本,然後這個求和就是基於元素的簡單矩陣求和。
broadcasting兩個數組需要遵循下面幾個原則:
如果上面的解釋有疑問,您可以查看下面文檔:
https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
支持broadcasting的函數稱之為universal函數,從下面文檔可以找到詳情:
https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
下圖是部分broadcasting的應用:
broadcasting可以讓你的代碼更加簡潔和高效,所以推薦掌握。
TAG:全球大搜羅 |