numpy數(shù)組廣播的機制
numpy數(shù)組的廣播功能強大,但是也同時讓人疑惑不解,現(xiàn)在讓我們來談?wù)勂渲械脑怼?/p>
廣播原則:
如果兩個數(shù)組的后緣維度(即:從末尾開始算起的維度)的軸長相符或其中一方的長度為1,則認(rèn)為它們是廣播兼容的,廣播會在缺失和(或)長度為1的軸上進(jìn)行.
上面的原則很重要,是廣播的指導(dǎo)思想,下面我們來看看例子。
1.其實在最簡單的數(shù)組與標(biāo)量數(shù)字之間的運算就存在廣播,只是我們把它看作理所當(dāng)然了。
2.再看下一個例子,這個大家都會一致認(rèn)為這是廣播了
根據(jù)廣播原則:arr1的shape為(4,1),arr2的shape為(3,),所以會同時在兩個軸發(fā)生廣播,arr1的shape變成(4,3),而arr2的shape變成(4,3),所以結(jié)果也為(4,3).
其實代碼中發(fā)生了下圖描述的事情:
3.同理,我們可以得到三維數(shù)組的廣播情況
根據(jù)廣播原則分析:arr1的shape為(3,4,2),arr2的shape為(4,2),它們的后緣軸長度都為(4,2),所以可以在0軸進(jìn)行廣播,arr2的shape變?yōu)?3,4,2).
下面說明一下三維數(shù)組在各維度的廣播形狀需求:
以上所有形狀都可以發(fā)生廣播,你可以用我們開篇所說的廣播原則進(jìn)行驗證。
最后,再來說一個易錯的實際例子。
arr減去他在1軸上的平均值,會出錯?看看為啥。
因為arr.mean(1)產(chǎn)生的shape為(4,),根據(jù)廣播原則,較小的數(shù)組的后緣維度必須為1,
所以需要將arr.mean變成(4,1),你所期望的結(jié)果如下:
參考:《利用Python進(jìn)行數(shù)據(jù)分析》
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python paramiko模塊利用多線程實現(xiàn)ssh并發(fā)執(zhí)行操作
ssh是一個協(xié)議,OpenSSH是其中一個開源實現(xiàn),paramiko是Python的一個庫,實現(xiàn)了SSHv2協(xié)議(底層使用cryptography)。這篇文章主要介紹了使用Python paramiko模塊利用多線程實現(xiàn)ssh并發(fā)執(zhí)行操作,需要的朋友可以參考下2019-12-12Python基于Serializer實現(xiàn)字段驗證及序列化
這篇文章主要介紹了Python基于Serializer實現(xiàn)字段驗證及序列化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11pytorch 使用單個GPU與多個GPU進(jìn)行訓(xùn)練與測試的方法
今天小編就為大家分享一篇pytorch 使用單個GPU與多個GPU進(jìn)行訓(xùn)練與測試的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python 如何用 Hypothesis 來自動化單元測試
這篇文章主要介紹了python 如何用 Hypothesis 來自動化單元測試,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03