अपने कोड को वेक्टराइज़ करने का महत्व

कार्यकुशल R कोड लिखना

Colin Gillespie

Jumping Rivers & Newcastle University

सामान्य नियम

  • R में किसी फंक्शन को कॉल करना अंततः C या FORTRAN कोड तक जाता है
    • यह कोड बेहद ऑप्टिमाइज़्ड होता है

लक्ष्य

  • अंदरूनी C या FORTRAN कोड तक जितनी जल्दी हो पहुँचे; जितनी कम फंक्शन कॉल, उतना बेहतर.
कार्यकुशल R कोड लिखना

वेक्टराइज़्ड फंक्शन

  • कई R फंक्शन वेक्टराइज़्ड होते हैं
    • एक संख्या लेते हैं लेकिन वेक्टर लौटाते हैं
rnorm(4)
-0.7247  0.2502  0.3510  0.6919
  • वेक्टर इनपुट के रूप में
mean(c(36, 48))
42
कार्यकुशल R कोड लिखना

रैंडम नंबर जनरेट करना

library(microbenchmark)
n <- 1e6
x <- vector("numeric", n)
microbenchmark(
    x <- rnorm(n),
    {
        for(i in seq_along(x))
            x[i] <- rnorm(1)
        },
    times = 10
)
# Unit: milliseconds
# expr        lq mean    uq  cld
# rnorm(n)    60   70    80  a
# Looping   2600 2700  2800   b

## प्रस्तुति के लिए आउटपुट छोटा किया गया

तुलना करें

x <- vector("numeric", n)
for(i in seq_along(x))
    x[i] <- rnorm(1)

से

x <- rnorm(n)
कार्यकुशल R कोड लिखना

लूप धीमा क्यों है?

लूपिंग
x <- vector("numeric", n)
for(i in seq_along(x))
    x[i] <- rnorm(1)
अलोकेशन
x <- vector("numeric", n)
  • लूप: एक बार की लागत
  • वेक्टराइज़्ड: समान
जेनरेशन
  • लूप: rnorm() के दस लाख कॉल
  • वेक्टराइज़्ड: rnorm() का एक ही कॉल
असाइनमेंट
  • लूप: असाइनमेंट मेथड के दस लाख कॉल
  • वेक्टराइज़्ड: एक ही असाइनमेंट
कार्यकुशल R कोड लिखना

R क्लब

R क्लब का दूसरा नियम: जहाँ संभव हो, वेक्टराइज़्ड समाधान अपनाएँ.

कार्यकुशल R कोड लिखना

अभ्यास करते हैं!

कार्यकुशल R कोड लिखना

Preparing Video For Download...