ฉันกำลังเปรียบเทียบsample
ฟังก์ชันใน R และเปรียบเทียบกับigraph:sample_seq
และวิ่งไปสู่ผลลัพธ์ที่แปลก
เมื่อฉันเรียกใช้บางสิ่งเช่น:
library(microbenchmark)
library(igraph)
set.seed(1234)
N <- 55^4
M <- 500
(mbm <- microbenchmark(v1 = {sample(N,M)},
v2 = {igraph::sample_seq(1,N,M)}, times=50))
ฉันได้รับผลลัพธ์เช่นนี้:
Unit: microseconds
expr min lq mean median uq max neval
v1 21551.475 22655.996 26966.22166 23748.2555 28340.974 47566.237 50
v2 32.873 37.952 82.85238 81.7675 96.141 358.277 50
แต่เมื่อฉันวิ่งเช่น
set.seed(1234)
N <- 100^4
M <- 500
(mbm <- microbenchmark(v1 = {sample(N,M)},
v2 = {igraph::sample_seq(1,N,M)}, times=50))
ฉันได้รับผลเร็วกว่ามากสำหรับsample
:
Unit: microseconds
expr min lq mean median uq max neval
v1 52.165 55.636 64.70412 58.2395 78.636 88.120 50
v2 39.174 43.504 62.09600 53.5715 73.253 176.419 50
ดูเหมือนว่าเมื่อN
ใดที่พลังของ 10 (หรือหมายเลขพิเศษอื่น ๆ ) sample
จะเร็วกว่าขนาดเล็กอื่น ๆN
ที่ไม่ใช่พลังของ 10 สิ่งนี้เป็นพฤติกรรมที่คาดหวังหรือฉันขาดอะไรบางอย่าง?