Может ли кто-нибудь сказать мне разумный способ, как рассчитать расстояние до ненулевых соседей в разреженной матрице? Причиной этого является то, что я хочу идентифицировать «дыры» в большой многомерной матрице.Получить расстояние до нулевого соседа в матрице
В качестве примера: Давайте предположим, что у меня есть 10x10 матрицы заполнены с большим количеством нулей и некоторых 1s:
f<-ceiling((runif(100,0,1))-.6)
a <- matrix(f, ncol=10L, nrow=10L)
rownames(a) = seq(1,10,1)
colnames(a) = seq(1,10,1)
может быть
> a
1 2 3 4 5 6 7 8 9 10
1 0 0 0 0 1 0 0 1 1 0
2 1 0 0 0 1 0 0 0 0 0
3 0 1 1 0 1 1 0 0 1 1
4 0 0 1 1 0 1 0 1 0 0
5 0 0 0 1 0 1 0 0 0 1
6 1 0 0 0*0*1 0 1 0 0
7 0 1 1 1 1 1 1 0 1 0
8 1 0 1 0 1 0 0 0 1 1
9 1 1 1 0 0 0 0 0 0 0
10 1 1 1 1 1 0 1 0 1 0
Что мне нужно, как результат является Матрица 10x10 со средним расстоянием всех четырех направлений (по два для каждого измерения) для всех нулевых точек.
E.g. точка a[6,5]
равна нулю и имеет 4 соседей. Расстояние слева - 5, справа - 1, вверх - 3, а вниз - 1. Таким образом, среднее значение будет 2,5. Если соседей не существует, среднее значение должно рассчитываться для остальных соседей.
Как обычно, моя первая идея была пучком для циклов, ища каждое значение матрицы во всех направлениях и возвращала расстояния. Но это должно быть тупым способом сделать это ...
В вашем примере, я думаю, что расстояние влево это 4, а не 5. –
Я думаю, вам понадобится некоторая функция, например 'apply' или' outer', чтобы, по крайней мере, неявно перебрать цикл 10 x 10. –
Конечно, вы правы, Дэвид –