python為什麼有廣播機制 Numpy的廣播機制

2021-10-11 19:41:02 字數 897 閱讀 8014

在python中使用numpy進行陣列運算時,會遇到形狀相同和形狀不同的情況

形狀相同

形狀相同的陣列之間的運算就是在對應位做運算。

形狀不同

在numpy中如果遇到大小不一致的陣列運算,就會觸發廣播機制。

廣播廣播(broadcasting)指的是不同形狀的陣列之間的算術運算的執行方式。

廣播原則

讓所有輸入陣列都向其中形狀最長的陣列看齊,形狀中不足的部分都通過在前面加 1 補齊。

輸出陣列的形狀是輸入陣列形狀的各個維度上的最大值。

如果輸入陣列的某個維度和輸出陣列的對應維度的長度相同或者其長度為 1 時,這個陣列能夠用來計算,否則出錯。

當輸入陣列的某個維度的長度為 1 時,沿著此維度運算時都用此維度上的第一組值。

通俗的理解就是:將兩個陣列的維度大小右對齊,然後比較對應維度上的數值,如果數值相等或其中有乙個為1或者為空,則能進行廣播運算,並且輸出的維度大小為取數值大的數值。否則不能進行陣列運算。

舉例陣列a的大小為(4,3)

陣列b的大小為(4,1)

右對齊:

4,34,1

4,3所以最後兩個陣列運算的輸出大小為:(4,3),二維陣列在1維上進行傳播。

陣列a的大小為(4,3)

陣列b的大小為(1,3)

右對齊:

4,31,3

4,3所以最後兩個陣列運算的輸出大小為:(4,3),二維陣列在0維上進行傳播。

陣列a的大小為(3,4,2)

陣列b的大小為(4,2)

右對齊:

3,4,2

4,23,4,2

所以最後兩個陣列運算的輸出大小為:(4,3),三維陣列在0維上進行傳播。

兩個陣列右對齊以後,對應維度裡的數值要麼相等,要麼為1,要麼缺失取大值。除此之外就會報錯

資料庫為什麼需要鎖機制 有哪些鎖機制

為什麼要鎖 資料庫是乙個多使用者使用的共享資源,比如乙個使用者表t user,兩個瀏覽器前面的人登入了同個乙個賬號,把 號碼改了。當多個使用者併發地訪問資料時,在資料庫中就會產生多個事務同時訪問同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性 髒讀,不可重複讀,...

03 為什麼封裝,為什麼有this?

為什麼封裝?嬰兒太多了,所以我們會考慮將每個出生的嬰兒的 文件 我們都會放於乙個盒子裡 這樣方便以後我們查詢他的身份證資訊。於是在這個盒子上,我們打了乙個孔,叫set 方法,如果是身份證,我們就取名 setcode 方法,這樣就將乙個人的身份證資訊建立 set了。但放進去後,我們有時候還需要檢驗這個...

為什麼要用Zero Copy機制

考慮這樣一種常用的情形 你需要將靜態內容 類似 檔案 展示給使用者。那麼這個情形就意味著你需要先將靜態內容從磁碟中拷貝出來放到乙個記憶體buf中,然後將這個buf通過socket傳輸給使用者,進而使用者或者靜態內容的展示。這看起來再正常不過了,但是實際上這是很低效的流程,我們把上面的這種情形抽象成下...