आर में एक मैट्रिक्स के पद गणना करने के लिए सुझाया गया तरीका qr
हो रहा है:2 * 2 मैट्रिक्स के रैंक की गणना के लिए सबसे तेज़ तरीका?
X <- matrix(c(1, 2, 3, 4), ncol = 2, byrow=T)
Y <- matrix(c(1.0, 1, 1, 1), ncol = 2, byrow=T)
qr(X)$rank
[1] 2
qr(Y)$rank
[1] 1
मैं अपने विशेष मामले के लिए इस समारोह को संशोधित करके दक्षता में सुधार करने में सक्षम था:
qr2 <- function (x, tol = 1e-07) {
if (!is.double(x))
storage.mode(x) <- "double"
p <- as.integer(2)
n <- as.integer(2)
res <- .Fortran("dqrdc2", qr = x, n, n, p, as.double(tol),
rank = integer(1L), qraux = double(p), pivot = as.integer(1L:p),
double(2 * p), PACKAGE = "base")[c(1, 6, 7, 8)]
class(res) <- "qr"
res}
qr2(X)$rank
[1] 2
qr2(Y)$rank
[1] 1
library(microbenchmark)
microbenchmark(qr(X)$rank,qr2(X)$rank,times=1000)
Unit: microseconds
expr min lq median uq max
1 qr(X)$rank 41.577 44.041 45.580 46.812 1302.091
2 qr2(X)$rank 19.403 21.251 23.099 24.331 80.997
आर का उपयोग करना , क्या 2 * 2 मैट्रिक्स के रैंक की गणना करना भी तेज़ है?
'भाग्य (98)' - ठीक है, समय 4 मुझे लगता है। – BenBarnes
@ बेनबर्नेस: मैंने उस समय का उपयोग किया जब मैंने इंटरवब्स पर लोलकैट देखने के लिए सहेजा था। –
मैं एक ऐसे फ़ंक्शन के प्रदर्शन को अनुकूलित कर रहा हूं जिसे मुझे सिमुलेशन में कुछ मिलियन बार चलाने की आवश्यकता है। इस समारोह में थोड़ी देर के अंदर 'qr' का उपयोग किया जाता है। तो, अंत में उन microseconds कुछ घंटे तक। – Roland