Мне нужно вычислить среднее значение каждого недиагонального элемента в n × n-матрице. Нижний и верхний треугольники являются избыточными. Здесь код, который я использую в настоящее время:
A <- replicate(500, rnorm(500))
sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)]))
Кажется, что он работает, но не масштабируется с большими матрицами. Те, что у меня есть, не огромны, около 2-5000 ^ 2, но даже с 1000 ^ 2 это занимает больше времени, чем хотелось бы:
A <- replicate(1000, rnorm(1000))
system.time(sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)])))
> user system elapsed
> 26.662 4.846 31.494
Есть ли более разумный способ сделать это?
изменить. Чтобы уточнить, я хотел бы, чтобы среднее значение каждой диагонали было независимо, например. для:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Я бы хотел:
mean(c(1,2,3))
mean(c(1,2))
mean(1)