亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python中numpy廣播功能(broadcasting)的一些注意事項(xiàng)

系統(tǒng) 2188 0

Python 的特性允許你使用廣播( broadcasting )功能,這是 Python numpy 程序語言庫中最靈活的地方。而我認(rèn)為這是程序語言的優(yōu)點(diǎn),也是缺點(diǎn)。優(yōu)點(diǎn)的原因在于它們創(chuàng)造出語言的表達(dá)性, Python 語言巨大的靈活性使得你僅僅通過一行代碼就能做很多事情。但是這也是缺點(diǎn),由于廣播巨大的靈活性,有時候你對于廣播的特點(diǎn)以及廣播的工作原理這些細(xì)節(jié)不熟悉的話,你可能會產(chǎn)生很細(xì)微或者看起來很奇怪的 bug 。例如,如果你將一個列向量添加到一個行向量中,你會以為它報出維度不匹配或類型錯誤之類的錯誤,但是實(shí)際上你會得到一個行向量和列向量的求和。

Python 的這些奇怪的影響之中,其實(shí)是有一個內(nèi)在的邏輯關(guān)系的。但是如果對 Python 不熟悉的話,我就曾經(jīng)見過的一些學(xué)生非常生硬、非常艱難地去尋找 bug 。所以我在這里想做的就是分享給你們一些技巧,這些技巧對我非常有用,它們能消除或者簡化我的代碼中所有看起來很奇怪的 bug 。同時我也希望通過這些技巧,你也能更容易地寫沒有 bug Python numpy 代碼。

為了演示 Python-numpy 的一個容易被忽略的效果,特別是怎樣在 Python-numpy 中構(gòu)造向量,讓我來做一個快速示范。首先設(shè)置,這樣會生成存儲在數(shù)組??中的5個高斯隨機(jī)數(shù)變量。之后輸出?,從屏幕上可以得知,此時??的 shape (形狀)是一個的結(jié)構(gòu)。這在 Python 中被稱作 一個一維數(shù)組 。它既不是一個行向量也不是一個列向量,這也導(dǎo)致它有一些不是很直觀的效果。舉個例子,如果我輸出一個轉(zhuǎn)置陣,最終結(jié)果它會和看起來一樣,所以和的轉(zhuǎn)置陣最終結(jié)果看起來一樣。而如果我輸出和的轉(zhuǎn)置陣的內(nèi)積,你可能會想:乘以的轉(zhuǎn)置返回給你的可能會是一個矩陣。但是如果我這樣做,你只會得到一個數(shù)。

python中numpy廣播功能(broadcasting)的一些注意事項(xiàng)_第1張圖片

所以我建議當(dāng)你編寫神經(jīng)網(wǎng)絡(luò)時,不要在它的 shape 是還是或者一維數(shù)組時使用數(shù)據(jù)結(jié)構(gòu)。相反,如果你設(shè)置??為,那么這就將置于5行1列向量中。在先前的操作里??和??的轉(zhuǎn)置看起來一樣,而現(xiàn)在這樣的??變成一個新的??的轉(zhuǎn)置,并且它是一個行向量。請注意一個細(xì)微的差別,在這種數(shù)據(jù)結(jié)構(gòu)中,當(dāng)我們輸出??的轉(zhuǎn)置時有兩對方括號,而之前只有一對方括號,所以這就是1行5列的矩陣和一維數(shù)組的差別。

python中numpy廣播功能(broadcasting)的一些注意事項(xiàng)_第2張圖片

如果你輸出??和??的轉(zhuǎn)置的乘積,然后會返回給你一個向量的外積,是吧?所以這兩個向量的外積返回給你的是一個矩陣。

python中numpy廣播功能(broadcasting)的一些注意事項(xiàng)_第3張圖片

就我們剛才看到的,再進(jìn)一步說明。首先我們剛剛運(yùn)行的命令是這個?,而且它生成了一個數(shù)據(jù)結(jié)構(gòu)?,是,一個有趣的東西。這被稱作??的一維數(shù)組,同時這也是一個非常有趣的數(shù)據(jù)結(jié)構(gòu)。它不像行向量和列向量那樣表現(xiàn)的很一致,這也讓它的一些影響不那么明顯。所以我建議,當(dāng)你在編程練習(xí)或者在執(zhí)行邏輯回歸和神經(jīng)網(wǎng)絡(luò)時,你不需要使用這些一維數(shù)組。

python中numpy廣播功能(broadcasting)的一些注意事項(xiàng)_第4張圖片

相反,如果你每次創(chuàng)建一個數(shù)組,你都得讓它成為一個列向量,產(chǎn)生一個向量或者你讓它成為一個行向量,那么你的向量的行為可能會更容易被理解。所以在這種情況下,等同于。這種表現(xiàn)很像?,但是實(shí)際上卻是一個列向量。同時這也是為什么當(dāng)它是一個列向量的時候,你能認(rèn)為這是矩陣;同時這里?將要變成,這就像行向量一樣。所以當(dāng)你需要一個向量時,我會說用這個或那個( column vector or row vector ),但絕不會是一維數(shù)組。

我寫代碼時還有一件經(jīng)常做的事,那就是如果我不完全確定一個向量的維度( dimension ),我經(jīng)常會扔進(jìn)一個斷言語句( assertion statement )。像這樣,去確保在這種情況下是一個向量,或者說是一個列向量。這些斷言語句實(shí)際上是要去執(zhí)行的,并且它們也會有助于為你的代碼提供信息。所以不論你要做什么,不要猶豫直接插入斷言語句。如果你不小心以一維數(shù)組來執(zhí)行,你也能夠重新改變數(shù)組維數(shù)?,表明一個數(shù)組或者一個數(shù)組,以致于它表現(xiàn)更像列向量或行向量。

我有時候看見學(xué)生因?yàn)橐痪S數(shù)組不直觀的影響,難以定位bug而告終。通過在原先的代碼里清除一維數(shù)組,我的代碼變得更加簡潔。而且實(shí)際上就我在代碼中表現(xiàn)的事情而言,我從來不使用一維數(shù)組。因此,要去簡化你的代碼,而且不要使用一維數(shù)組??偸鞘褂??維矩陣(基本上是列向量),或者??維矩陣(基本上是行向量),這樣你可以減少很多 assert 語句來節(jié)省核矩陣和數(shù)組的維數(shù)的時間。另外,為了確保你的矩陣或向量所需要的維數(shù)時,不要羞于? reshape ?操作。

總之,我希望這些建議能幫助你解決一個 Python 中的bug,從而使你更容易地完成練習(xí)。

?

?

了解更多?

微信公眾號:freeinvest


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕欧美日韩一 | 国产精品露脸张开双腿 | 欧美一级www片免费观看 | 超清波多野结衣精品一区 | 96精彩视频在线观看 | 国产午夜永久福利视频在线观看 | 99热都是精品 | 中文日韩字幕一区在线观看 | se01国产短视频在线观看 | 成人毛片18岁女人毛片免费看 | 精品久久久久久中文字幕女 | 久久天天躁夜夜躁狠狠躁2020 | 欧美一区三区 | 久久夜夜操 | 尤物黄色| 久久水蜜桃 | 国产三级在线精品男人的天堂 | 欧美综合图区亚洲综合图区 | 中文线码中文高清播放中 | 欧美不卡在线 | 91在线精品免费观看 | 草草影院第一页yycccom | 久久国产成人亚洲精品影院老金 | 91九色视频在线观看 | 色综合视频 | 91视频大全| 欧美高清亚洲欧美一区h | 日韩中文字幕免费在线观看 | 亚洲情综合五月天 | 国产亚洲精品自在久久不卡 | 在线亚洲激情 | 桃色视频在线观看 | 欧美三级成人理伦 | 亚洲欧美精品网站在线观看 | 国产精品伦理一二三区伦理 | 久久这里只有精品免费看青草 | 在线成人精品国产区免费 | 国产精品一区二区在线观看 | 看免费黄色一级视频 | 精品69久久久久久99 | 国产成人在线免费观看 |