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

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

“*應用”家庭真的沒有矢量化嗎?

“*應用”家庭真的沒有矢量化嗎?

慕俠2389804 2019-06-28 09:53:47
“*應用”家庭真的沒有矢量化嗎?所以我們習慣于對每一個R的新用戶說apply不是矢量化的,看看帕特里克·伯恩斯r地獄第4圈“它說(我引述):一個常見的反射是在應用程序家族中使用一個函數(shù)。這不是 矢量化,是循環(huán)隱藏。..Apply函數(shù)的定義中有一個for循環(huán)。lApplication函數(shù)掩埋循環(huán),但執(zhí)行時間往往與顯式for循環(huán)大致相等。實際上,快速查看一下apply源代碼顯示了循環(huán):grep("for", capture.output(getAnywhere("apply")), value = TRUE)## [1] "        for (i in 1L:d2) {"  "    else for (i in 1L:d2) {"好的,但是看看lapply或vapply實際上展示了一幅完全不同的畫面:lapply## function (X, FUN, ...) ## {##     FUN <- match.fun(FUN)##     if (!is.vector(X) || is.object(X)) ##        X <- as.list(X)##     .Internal(lapply(X, FUN))## }## <bytecode: 0x000000000284b618>## <environment: namespace:base>所以很明顯沒有Rfor循環(huán)隱藏在那里,而是調(diào)用內(nèi)部C編寫函數(shù)。快速瀏覽兔子 孔洞顯示了幾乎相同的圖片另外,讓我們把colMeans函數(shù),它從未被指責沒有被傳送。colMeans# function (x, na.rm = FALSE, dims = 1L) # {#   if (is.data.frame(x)) #     x <- as.matrix(x)#   if (!is.array(x) || length(dn <- dim(x)) < 2L) #     stop("'x' must be an array of at least two dimensions")#   if (dims < 1L || dims > length(dn) - 1L) #     stop("invalid 'dims'")#   n <- prod(dn[1L:dims])#   dn <- dn[-(1L:dims)]#   z <- if (is.complex(x)) #     .Internal(colMeans(Re(x), n, prod(dn), na.rm)) + (0+1i) * #     .Internal(colMeans(Im(x), n, prod(dn), na.rm))#   else .Internal(colMeans(x, n, prod(dn), na.rm))#   if (length(dn) > 1L) {#     dim(z) <- dn#     dimnames(z) <- dimnames(x)[-(1L:dims)]#   }#   else names(z) <- dimnames(x)[[dims + 1]]#   z# }# <bytecode: 0x0000000008f89d20>#   <environment: namespace:base>哈?它也只是打電話.Internal(colMeans(...我們也可以在兔洞..所以這和.Internal(lapply(..?事實上,一個快速的基準測試顯示sapply表現(xiàn)不遜于colMeans比for用于大數(shù)據(jù)集的循環(huán)。m <- as.data.frame(matrix(1:1e7, ncol = 1e5))system.time(colMeans(m))# user  system elapsed # 1.69    0.03    1.73 system.time(sapply(m, mean))# user  system elapsed # 1.50    0.03    1.60 system.time(apply(m, 2, mean))# user  system elapsed # 3.84    0.03    3.90 system.time(for(i in 1:ncol(m)) mean(m[, i]))# user  system elapsed # 13.78    0.01   13.93換句話說,這么說對嗎?lapply和vapply 實際上是矢量化的(與apply這是for循環(huán),它也調(diào)用lapply帕特里克·伯恩斯到底想說什么?
查看完整描述

3 回答

?
青春有我

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

對我來說,矢量化主要是使代碼更易于編寫和理解。

矢量化函數(shù)的目標是消除與for循環(huán)相關的簿記。例如,而不是:

means <- numeric(length(mtcars))for (i in seq_along(mtcars)) {
  means[i] <- mean(mtcars[[i]])}sds <- numeric(length(mtcars))for (i in seq_along(mtcars)) {
  sds[i] <- sd(mtcars[[i]])}

你可以寫:

means <- vapply(mtcars, mean, numeric(1))sds   <- vapply(mtcars, sd, numeric(1))

這樣就可以更容易地看到什么是相同的(輸入數(shù)據(jù))和什么是不同的(您正在應用的函數(shù))。

矢量化的另一個優(yōu)點是,for循環(huán)通常是用C編寫的,而不是用R編寫的,這有很大的性能優(yōu)勢,但我不認為它是矢量化的關鍵屬性。矢量化從根本上講是為了拯救你的大腦,而不是拯救計算機工作。


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 550 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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