黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 2364 0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?

?

了解更多?

微信公眾號(hào):freeinvest


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論