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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么R中循環(huán)慢?

為什么R中循環(huán)慢?

慕田峪7331174 2019-07-13 10:42:23
我知道循環(huán)很慢R我應(yīng)該試著用一種矢量化的方式去做事情。但是,為什么?為什么循環(huán)慢apply是快嗎?apply調(diào)用幾個子函數(shù)-看起來不太快。最新情況:很抱歉,這個問題是不恰當(dāng)?shù)?。我把矢量化和apply..我的問題應(yīng)該是,“為什么矢量化更快?”
查看完整描述

3 回答

?
絕地?zé)o雙

TA貢獻1946條經(jīng)驗 獲得超4個贊

R中的循環(huán)是慢的,因為任何解釋的語言都是慢的:每一次操作都會帶來很多額外的負(fù)擔(dān)。

R_execClosure在……里面eval.c(這是調(diào)用用戶定義函數(shù)的函數(shù))。它有近100行長,并執(zhí)行各種操作-創(chuàng)建用于執(zhí)行的環(huán)境,將參數(shù)分配到環(huán)境中,等等。

想一想,在C中調(diào)用函數(shù)(將args推到堆棧、跳轉(zhuǎn)、彈出args)時發(fā)生的事情要少得多。

這就是為什么你會得到這樣的時間安排(正如joran在評論中指出的那樣,這實際上不是apply這太快了,這是內(nèi)部C循環(huán)mean太快了。apply只是普通的舊R碼):

A = matrix(as.numeric(1:100000))

使用循環(huán):0.342秒:

system.time({
    Sum = 0
    for (i in seq_along(A)) {
        Sum = Sum + A[[i]]
    }
    Sum})

使用SUM:無法測量的?。?/trans>

sum(A)

這有點令人不安,因為,漸近地說,循環(huán)就像sum沒有任何實際的理由,它應(yīng)該是緩慢的,它只是做更多的額外工作,每次迭代。

因此,請考慮:

# 0.370 secondssystem.time({
    I = 0
    while (I < 100000) {
        10
        I = I + 1
    }})# 0.743 seconds -- double the time just adding parenthesessystem.time({
    I = 0
    while (I < 100000) {
        ((((((((((10))))))))))
        I = I + 1
    }})

(這個例子是由拉德福德·尼爾)

因為(在R中是一個運算符,實際上每次使用它時都需要一個名稱查找:

> `(` = function(x) 2> (3)[1] 2

或者,一般來說,解釋操作(在任何語言中)都有更多的步驟。當(dāng)然,這些步驟也提供了好處:你不能那,那個(在C.


查看完整回答
反對 回復(fù) 2019-07-13
?
慕絲7291255

TA貢獻1859條經(jīng)驗 獲得超6個贊

循環(huán)不是總是慢的,而且apply是快速的。對此有一個很好的討論2008年5月,R新聞雜志:

尤伊·利格斯和約翰·??怂埂7?wù)臺:我怎樣才能避免這個循環(huán),或者讓它更快?r新聞,8(1):46-50,2008年5月。

在“循環(huán)!”(從第48頁開始),他們說:

許多關(guān)于R狀態(tài)的評論認(rèn)為使用循環(huán)是一個特別糟糕的主意。這不一定是真的。在某些情況下,很難編寫向量化代碼,或者向量化代碼可能會消耗大量內(nèi)存。

他們還建議:

  • 在循環(huán)之前將新對象初始化為完整長度,而不是在循環(huán)中增加它們的大小。
  • 不要在循環(huán)中做可以在循環(huán)之外完成的事情。
  • 不要為了避免循環(huán)而避免循環(huán)。

他們有一個簡單的例子,其中for循環(huán)需要1.3秒,但是apply內(nèi)存耗盡了。


查看完整回答
反對 回復(fù) 2019-07-13
  • 3 回答
  • 0 關(guān)注
  • 1371 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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