Hesaplamalarımı hızlandırmak ve m
işlevinde döngü kullanmadan sonuç almak istiyorum. Tekrar üretilebilir örnek:R: döngüden kurtulmak ve hız kodu
N <- 2500
n <- 500
r <- replicate(1000, sample(N, n))
m <- function(r, N) {
ic <- matrix(0, nrow = N, ncol = N)
for (i in 1:ncol(r)) {
p <- r[, i]
ic[p, p] <- ic[p, p] + 1
}
ic
}
system.time(ic <- m(r, N))
# user system elapsed
# 6.25 0.51 6.76
isSymmetric(ic)
# [1] TRUE
biz matriks değil vektörü ile ilgileniyor
for
döngünün her tekrarında
, bu nedenle bu nasıl Vektörize olabilir?
@ joel.wilson Bu işlevin amacı, elemanların ikili frekanslarını hesaplamaktır. Bundan sonra, çift taraflı eklenme olasılıklarını tahmin edebiliriz.
@Khashaa ve @alexis_laz'a teşekkürler. Deneyler: Bu çifte endeksleme işlemleri ortadan kaldırdığı
> require(rbenchmark)
> benchmark(m(r, N),
+ m1(r, N),
+ mvec(r, N),
+ alexis(r, N),
+ replications = 10, order = "elapsed")
test replications elapsed relative user.self sys.self user.child sys.child
4 alexis(r, N) 10 4.73 1.000 4.63 0.11 NA NA
3 mvec(r, N) 10 5.36 1.133 5.18 0.18 NA NA
2 m1(r, N) 10 5.48 1.159 5.29 0.19 NA NA
1 m(r, N) 10 61.41 12.983 60.43 0.90 NA NA
vectorized edilebilir fonksiyonun amacı? Bunu açıklayabilir misin? –
Bir matris sadece boyutları ile vektördür. – Tensibai
Hız endişeniz varsa, o zaman uygulama işlevlerini kullanmayı düşünmelisiniz. – Ansjovis86