R: Covarance inversion

Jul 03, 2012 17:54

Помните, как там в анекдоте, про математика, которому поручили вскипятить полную кастрюлю воды? "Выливаем воду, а дальше всё так же, как для пустой кастрюли".

Сегодня потребовалась самая малость - инвертировать ковариацию в таблице при условии, заданном логическим вектором, вида:

> v1
  [1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE

То есть, если v1[i] != v1[j] - требуется преобразование, иначе - нет. Начал мучить, и решил всё через цикл:

m1<-matrix(1, nrow=10, ncol=10)
len <- length(v1)
for (i in 1:(len -1))
    for (j in (i+1):len)
        if (v1[i] != v1[j])
             m1[j,i] <- m1[i,j] <- -m1[i,j]

И лишь под вечер сообразил, что всё решается то вообще элементарно:

m[v1,] <- -m[v1,]
m[,v1] <- -m[,v1]

Вот так и рождаются анекдоты про индусских программистов, видимо.

r project, пособие по вкручиванию лампочек, сломай себе моск

Previous post Next post
Up