您現在的位置是:首頁 > 手機遊戲首頁手機遊戲

Python學習第119課——numpy中的broadcasting

簡介例:執行結果:從上例中,我們看到,x的“形狀”是3行2列,y的“形狀”是1行2列,之前我們學習numpy中的四則運算,所舉的例子中,兩個陣列都是相同的“形狀”,在相加的時候每個陣列對應位置上的元素分別相加,形成新的陣列

python中冒號表示什麼

【每天幾分鐘,從零入門python程式設計的世界!】

這節課我們學習numpy中的資料的一個多變的特性——broadcasting,broadcasting的官方的說明比較麻煩,我們這裡把它簡化一下,就把它當做“腦補”的意思。

我們舉例來說明。

例:

執行結果:

從上例中,我們看到,x的“形狀”是3行2列,y的“形狀”是1行2列,之前我們學習numpy中的四則運算,所舉的例子中,兩個陣列都是相同的“形狀”,在相加的時候每個陣列對應位置上的元素分別相加,形成新的陣列。而在這個例子中,x和y“形狀”不相同,y沒有第二行和第三行,但是我們看到程式碼執行結果,相當於如下的程式碼:

執行結果是一樣的:

這就是broadcasting,就相當於把y的第二行、第三行“腦補”上跟第一行一樣的元素,從而讓x和y的“形狀”相同,都變成3行2列,然後再進行對位運算,這就是broadcasting。

●什麼是broadcasting?

根據上例,我們發現沒有什麼複雜的原理,我們只要知道numpy中兩個“形狀”不同的陣列進行加減乘除運算時,會“腦補”成相同的形狀再進行運算,這種運算的方法就叫broadcasting。

●numpy。empty_like

我們可以用numpy.empty_like(x)生成一個跟x陣列形狀一樣的新的陣列

例:

Python學習第119課——numpy中的broadcasting

執行結果:

Python學習第119課——numpy中的broadcasting

透過上面的程式碼,我們用np。empty_like(x)生成了一個數組,儲存在z中,當我們把x和z打印出來,看到結果是一樣的。

除了np。empty_like(x),還有np。ones_like(x)、np。zeros_like(x)等等,它們也是分別生成跟x“形狀”一樣的陣列,但是前者每個元素都是1,後者每個元素都是0。知道有這樣的東西就行。

●用numpy。empty_like實現broadcast

例:

Python學習第119課——numpy中的broadcasting

執行結果:

程式碼說明:

z[i,:]表示z陣列的第i行所有列的元素。

比如z[1,0:2]就表示z陣列的第2行的第1列到第2列的元素。逗號前面代表行數,逗號後面代表列數,冒號前後什麼都不寫就代表這一行的所有列的元素。

我們透過np。empty_like以及for迴圈的方式,把x陣列的每一行的元素都加上y陣列對應位置上的元素,這個過程就相當於broadcast“腦補”的過程。

我是時問新,歡迎關注我。跟我一起從零開始學習Python,每天花一點時間,開啟python程式設計新世界的大門,領略新的風光,讓人生多一種可能!

Top