R_Language 板


LINE

這種事情殺雞焉用牛刀,用迴圈最快也最簡單 A <- matrix(c(1:48),ncol = 16L) B <- matrix(c(1:80),ncol = 16L) mutual <- function(delta, a, FUN = "*"){ delta <- as.matrix(delta) a <- as.matrix(a) result <- matrix(outer(delta, a, FUN), nrow = nrow(delta)) return(result) } f <- function(a,b){ return(as.matrix(a) %*% t(b)) } g <- function(A, B){ out <- array(dim = c(nrow(A), nrow(B), ncol(A))) for (i in 1L:ncol(A)) out[ , , i] <- A[ , i] %o% B[ , i] return(out) } library(microbenchmark) microbenchmark( original = lapply(1L:ncol(A) , function(x) mutual(A[,x], B[,x])), simplify2array = simplify2array(lapply(1:ncol(A) , function(x) f(A[,x], B[,x]))), forLoop = g(A, B), times = 20L ) # Unit: microseconds # expr min lq mean median uq max neval # original 419.838 423.6410 702.6495 426.2735 431.6865 5669.115 20 # simplify2array 222.938 224.8400 389.2933 229.0820 236.2500 3406.385 20 # forLoop 183.734 187.5375 486.0899 190.7555 195.4375 5987.723 20 不過我的R是3.4.0,所以JIT加持快很多,不確定其他版本是不是一樣水準 A <- matrix(c(1:48000), ncol = 1600L) B <- matrix(c(1:8000), ncol = 1600L) microbenchmark( original = lapply(1L:ncol(A) , function(x) mutual(A[,x], B[,x])), simplify2array = simplify2array(lapply(1:ncol(A) , function(x) f(A[,x], B[,x]))), forLoop = g(A, B), times = 20L ) # Unit: milliseconds # expr min lq mean median uq max neval # original 44.37369 46.77744 48.24738 47.98765 49.32776 53.08230 20 # simplify2array 21.89062 23.83928 28.64161 25.65306 26.21406 94.59203 20 # forLoop 21.23322 22.69387 24.72092 24.64764 25.65935 31.67589 20 ※ 引述《wheado (principal component QQ)》之銘言: : [問題類型]: : 兩個滿大的矩陣同時透過row來進行操作 : 用一個例子來說明我的問題 : [軟體熟悉度]: : 新手 : [問題敘述]: : A=[ 1 2 3 4 ] B=[ 1 2 3 4 ] A與B的column相同 : [ 5 6 7 8 ] [ 5 6 7 8 ] : [ 9 10 11 12 ] [ 9 10 11 12 ] : [ 13 14 15 16 ] [ 13 14 15 16 ] : [ 17 18 19 20 ] [ 17 18 19 20 ] : [ 21 22 23 24 ] : [ 25 26 27 28 ] : [ 29 30 31 32 ] : 我想透過類似apply的運算,將A與B兩個矩陣的Column分別提出來運算, : 運算內容是有點複雜,用上述例子來說明。 : A* B* : 以第一個column來說,提出來的分別是 [ 1 ] [ 1 ] : [ 5 ] [ 5 ] : [ 9 ] [ 9 ] : [ 13 ] [ 13 ] : [ 17 ] [ 17 ] : [ 21 ] : [ 25 ] : [ 29 ] : 接著將A*每個元素與B*每個元素"乘積",也就是產生一個矩陣(向量也可以)如下 : [ 1*1 1*5 1*9 1*13 1*17 1*21 1*25 1*29 ] : [ 5*1 5*5 5*9 5*13 5*17 5*21 5*25 5*29 ] : [ 9*1 9*5 9*9 9*13 9*17 9*21 9*25 9*29 ] : [ 13*1 13*5 13*9 13*13 13*17 13*21 13*25 13*29 ] : [ 17*1 17*5 17*9 17*13 17*17 17*21 17*25 17*29 ] : 以此類推會產生 4 個矩陣(或向量),輸出方式目前想到只有 list 比較方便。 : 由於我們兩個矩陣A與B可能會有點大,因此希望可以稍微快一些的計算方法, : 又希望程式碼可讀性可以高一點,讓自己以後比較容易看懂(修改)。 : ~~~謝謝各位神人閱讀~~~ : [程式範例]: : 我有嘗試了一個方式,但我覺得可讀性很低, : 希望可以改的更簡單易懂,速度更快一些。 : 我是用 指令outer 來做,以下程式碼,矩陣大一點就要等一些時間了QQ : 程式碼貼於以下網址: : http://ideone.com/NmFGVT : [環境敘述]: : win10 + R_64 : [關鍵字]: : outer apply mapply lapply --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.188.7
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1499953018.A.279.html ※ 編輯: celestialgod (36.232.188.7), 07/13/2017 21:37:17 ※ 編輯: celestialgod (36.232.188.7), 07/13/2017 21:42:29
1F:推 wheado: 謝謝大師不厭其煩指教,直覺上就是想避開loop,沒想到loop 07/13 21:49
2F:→ wheado: 威力還真是簡單強大。 07/13 21:49
3F:推 f496328mm: R 3.4 有加強迴圈的威力 07/13 21:53
4F:推 Edster: for迴圈變快真是好消息. 07/13 22:02
其實R迴圈改array很快... ※ 編輯: celestialgod (36.232.188.7), 07/13/2017 22:06:09
5F:→ sacidoO: 推C神 07/15 22:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP