第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么與使用兩個(gè) Numpy 數(shù)組的向量化相比,使用 Numpy 數(shù)組和 int 進(jìn)行算術(shù)運(yùn)算時(shí)減

為什么與使用兩個(gè) Numpy 數(shù)組的向量化相比,使用 Numpy 數(shù)組和 int 進(jìn)行算術(shù)運(yùn)算時(shí)減

嚕嚕噠 2022-06-28 11:12:20
我對(duì)為什么這段代碼感到困惑:start = time.time()for i in range(1000000):    _ = 1 - np.log(X)print(time.time()-start)執(zhí)行速度比這個(gè)實(shí)現(xiàn)快:start = time.time()for i in range(1000000):    _ = np.subtract(np.ones_like(X), np.log(X))print(time.time()-start)我的理解是它應(yīng)該是相反的,因?yàn)樵诘诙€(gè)實(shí)現(xiàn)中我正在利用矢量化提供的加速,因?yàn)樗軌蛲瑫r(shí)操作 X 中的元素而不是順序操作,這就是我假設(shè)第一個(gè)實(shí)現(xiàn)的方式功能。有人可以為我解釋一下嗎,因?yàn)槲艺娴暮芾Щ??謝謝!
查看完整描述

4 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

您的代碼的兩個(gè)版本都是矢量化的。您為嘗試向量化第二個(gè)版本而創(chuàng)建的數(shù)組只是開銷。


NumPy 向量化不是指硬件向量化。如果編譯器足夠聰明,它最終可能會(huì)使用硬件矢量化,但 NumPy 并沒有明確使用 AVX 或任何東西。

NumPy 向量化是指編寫一次對(duì)整個(gè)數(shù)組進(jìn)行操作的 Python 級(jí)代碼,而不是使用一次對(duì)多個(gè)操作數(shù)進(jìn)行操作的硬件指令。它是 Python 級(jí)別的向量化,而不是機(jī)器語(yǔ)言級(jí)別的向量化。與編寫顯式循環(huán)相比,這樣做的好處是 NumPy 可以在 C 級(jí)循環(huán)而不是 Python 中執(zhí)行工作,從而避免了大量的動(dòng)態(tài)調(diào)度、裝箱、拆箱、遍歷字節(jié)碼評(píng)估循環(huán)等。

從這個(gè)意義上說(shuō),您的代碼的兩個(gè)版本都是矢量化的,但是第二個(gè)版本在寫入和讀取巨大的數(shù)組時(shí)浪費(fèi)了大量?jī)?nèi)存和內(nèi)存帶寬。

此外,即使我們談?wù)摰氖怯布?jí)矢量化,該1 -版本也與其他版本一樣適用于硬件級(jí)矢量化。您只需將標(biāo)量加載1到向量寄存器的所有位置并正常進(jìn)行。與第二個(gè)版本相比,它涉及的內(nèi)存?zhèn)鬏斠俚枚?,因此可能仍然比第二個(gè)版本運(yùn)行得更快。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

時(shí)間基本相同。正如其他人指出的那樣,沒有任何類型的硬件或多核并行化,只是解釋 Python 和編譯numpy函數(shù)的混合。


In [289]: x = np.ones((1000,1000))


In [290]: timeit 1-np.log(x)                                                    

15 ms ± 1.94 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


In [291]: timeit np.subtract(np.ones_like(x), np.log(x))                        

18.6 ms ± 1.89 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

取出np.ones_like定時(shí)循環(huán):


In [292]: %%timeit y = np.ones_like(x) 

     ...: np.subtract(y,np.log(x)) 

     ...:  

     ...:                                                                       

15.7 ms ± 441 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

2/3 的時(shí)間花在log函數(shù)上:


In [303]: timeit np.log(x)                                                      

10.7 ms ± 211 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [306]: %%timeit y=np.log(x) 

     ...: np.subtract(1, y)                                                                  

3.77 ms ± 5.16 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)

生成方式的變化1只是時(shí)間的一小部分。


使用“廣播”,使用標(biāo)量和數(shù)組或數(shù)組和數(shù)組進(jìn)行數(shù)學(xué)運(yùn)算同樣容易。


,1無(wú)論是標(biāo)量(實(shí)際上是一個(gè)形狀為 的數(shù)組()),被廣播到 (1,1),然后到 (1000,1000),所有這些都沒有復(fù)制。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

我當(dāng)然不是 numpy 專家,但我的猜測(cè)是第一個(gè)例子只使用一個(gè)向量,第二個(gè)例子首先創(chuàng)建了一個(gè) 1 的向量,然后減去。后者需要雙倍的內(nèi)存和一個(gè)額外的步驟來(lái)創(chuàng)建 1 的向量。

在 x86 CPU 上,兩者都可能是某種 AVX 指令,一次可以處理 4 個(gè)數(shù)字。當(dāng)然,除非您使用的是 SIMD 寬度大于向量長(zhǎng)度的花哨 CPU,并且該 CPU 由 numpy 支持。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

案例 A 在 mpu 上僅運(yùn)行一個(gè)迭代器,而案例 B 在兩個(gè)與 X 一樣大的向量上具有兩個(gè)迭代器,如果未優(yōu)化,則需要在線程中進(jìn)行大量上下文切換。案例 B 是案例 A 的更通用版本......



查看完整回答
反對(duì) 回復(fù) 2022-06-28
  • 4 回答
  • 0 關(guān)注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)