Нет, нет более быстрого способа чтения матрицы, чем matr[i, j]
.
- Если у вас есть вектор, извлечение эквивалентного элемента может быть немного быстрее.
- Если у вас есть data.table, выполните
dt[['V3']][2]
.dt[2,3]
очень медленный. - Если у вас есть data.frame, выполните
df[['V3']][2]
.
Ваш пример с 10 000 000 значений в 10 строках (т. Е. 1 000 000 столбцов)
Unit: nanoseconds
expr min lq mean median uq max neval
vect[22] 100 900 1380 1250 2000 2900 10
x[2, 3] 100 200 1130 1500 1700 2300 10
x[[22]] 600 1000 1620 1600 1700 4400 10
dt[2, 3] 1120103100 1121659900 1132672490 1121957850 1123820200 1226030600 10
dt[2, V3] 1183598600 1185074800 1204766740 1188306650 1220468900 1262510200 10
dt[["V3"]][2] 8900 16800 32950 39850 43200 44400 10
df[2, 3] 7851400 7867500 8753220 8730250 9547200 10022700 10
df[["V3"]][2] 8100 11500 20830 16150 32700 36000 10
Ваш пример с 10 000 000 строками и 10 столбцами:
Unit: nanoseconds
expr min lq mean median uq max neval
vect[22] 100 300 508 400 600 2000 100
x[2, 3] 200 300 591 500 800 2600 100
x[[22]] 200 500 727 600 900 1900 100
dt[2, 3] 280800 288700 314736 295350 325200 509700 100
dt[2, V3] 495700 505950 910938 522750 560700 37038500 100
dt[["V3"]][2] 8200 9200 12048 11350 13100 23200 100
df[2, 3] 20600 23100 29587 28700 32950 68100 100
df[["V3"]][2] 7400 8300 11310 10500 12550 24100 100
Ваш пример с 100 строками:
Unit: nanoseconds
expr min lq mean median uq max neval
vect[22] 0 300 416 300 500 1100 100
x[2, 3] 100 300 542 450 800 1500 100
x[[22]] 100 400 654 600 800 1400 100
dt[2, 3] 256200 262000 270385 264850 268950 410100 100
dt[2, V3] 432000 439750 457196 443900 462200 617900 100
dt[["V3"]][2] 7800 8700 10965 10350 11400 23500 100
df[2, 3] 16600 18450 23580 22600 27300 81800 100
df[["V3"]][2] 7100 7850 9781 9400 10300 15100 100
Редактировать: Данные:
library(data.table)
set.seed(1)
vect <- runif(1E7)
x <- matrix(vect, ncol = 10)
df <- as.data.frame(x)
dt <- as.data.table(x)
vect[22];x[2,3];x[[22]];dt[2, 3]; df[2, 3]