華文網

運算效率提升:R中的向量化計算

R是函數式程式設計語言,其中向量化程式設計思維是其中的一個精髓,

正確使用它能幫你省掉一些不必要的代碼,並大幅提升運算效率。首先我們來看看什麼是向量化計算。

向量化計算

向量化計算是一種特殊的平行計算的方式,相比於一般程式在同一時間只執行一個操作的方式,它可以在同一時間執行多次操作,通常是對不同的資料執行同樣的一個或一批指令,或者說把指令應用於一個陣列或者向量。

我們來看看在R中的向量化計算:

x ## [1] 2 3 4 5 6# 取前3個元素,相當於把取值操作應用到前5個不同的元素## [1] 1 2 3# 修改前3個元素,相當於把賦值操作應用到前5個不同的元素## [1] 0 0 0 4 5# x的對應元素相乘,相當於把乘積操作應用到所有的元素## [1] 0 0 0 16 25

正如你看到的,向量化計算在R中的表現形式就是這麼簡單。下面我們來用一個簡單的例子做測試看看向量化計算對計算效率的提升效果。

計算一個陣列的平方和

迴圈版

如果你剛接觸R或者從其他語言轉過來,可能你會寫如下的for迴圈代碼:

forFun # 性能測試## user system elapsed

向量化版

它有一種更為簡便的寫法,直接採用base包中自帶的sum函數來求和。

verFun #性能測試## user system elapsed

我們對以上兩種寫法做性能測試發現,當計算的向量達到百萬級別時,以上兩者效率相差竟超過30倍。

以上代碼是在win10系統上運行的,電腦配置的i5處理器以及8G記憶體,R是64位元3.2.5版本。

所以,當我們在編寫涉及到迴圈運算的代碼時儘量採用一些向量化的函數對其進行處理,

少些顯式迴圈,這樣既可以減少代碼量,使得代碼更為簡潔,還可以大幅提高代碼的運行效率,何樂而不為呢?

R中的向量化計算可以通過一些向量化的函數實現,下面介紹一下向量化計算的一些常用函數:

向量化函數分類

我把向量化的函數分為以下三類:

1.base自帶函數

向量操作

sum

mean

max

min

median

cumsum

cummax

cummin

cumprod

x ## [1] 15# 均值## [1] 3# 最大值## [1] 5# 最小值## [1] 1# 中位數## [1] 3# 累積和## [1] 1 3 6 10 15# 累積最大值## [1] 1 2 3 4 5# 累積最小值## [1] 1 1 1 1 1# 累積乘積## [1] 1 2 6 24 120

邏輯操作

any

all

ifelse

x ## [1] TRUE# 判斷是否所有值為真## [1] FALSE# 條件為真輸出yes對應值,否則輸出no對應值## [1] 0 0 0 0 0 1 1 1 1 1

矩陣操作

colSums

colMeans

rowSums

rowMeans

M ## [1] 6 15 24 33# 矩陣列求均值## [1] 2 5 8 11# 矩陣行求和## [1] 22 26 30# 矩陣行求均值## [1] 5.5 6.5 7.5

2.apply函數簇

apply

apply可以對矩陣或者陣列的同一緯度應用相同的函數並得到匯總後的結果。下面我們用apply來實現上述矩陣操作類似的功能:

M ## [1] 6 15 24 33# 矩陣列求均值## [1] 2 5 8 11# 矩陣行求和## [1] 22 26 30# 矩陣行求均值## [1] 2 5 8 11

apply

中的函數除了採用系統自帶的函數外,還可以自行定義:

# 自訂函數## [1] 4 10 16 22

sapply

對每個元素應用相同的函數,有點像python裡面的map函數:

# 每個元素平方## [1] 1 4 9 16 25

lapply

對list類型的資料做操作

x ## $a

aggregate

資料匯總

## player x

3.plyr以及dplyr高級函數簇

資料處理之plyr和資料處理之dplyr。

小結

以上大多數向量化函數計算效率高的本質是其底層做了平行計算。我們在實際運用這些函數的時候,需要瞭解其適用場景,因地制宜,方能真正實現效率最大化。

End.

文章轉載自:資料採擷與R語言

中國統計網,是國內最早的大資料學習網站,歡迎關注!

資料採擷與R語言+R語言程式設計藝術(京東套裝共2冊) ¥93.9 購買

多元統計分析及R語言建模(第4版) ¥32.5 購買

R語言資料採擷(21世紀統計學系列教材) ¥48.6 購買

是國內最早的大資料學習網站,歡迎關注!

資料採擷與R語言+R語言程式設計藝術(京東套裝共2冊) ¥93.9 購買

多元統計分析及R語言建模(第4版) ¥32.5 購買

R語言資料採擷(21世紀統計學系列教材) ¥48.6 購買