2013-06-05 10 views
5

Ho una matrice p n x e vorrebbe calcolare il n x n matrice B definitoveloce calcolo della matrice kernel R

B[i, j] = f(A[i,], A[j,]) 

dove f è una funzione che accetta argomenti della dimensionalità appropriata. C'è un trucco per calcolare questo in R? f è simmetrico e positivo-definito (se questo può aiutare nel calcolo).

MODIFICA: Praneet chiede di specificare f. Questo è un buon punto. Anche se penso che sarebbe interessante avere una soluzione efficiente per qualsiasi funzione, otterrei molto chilometraggio dal calcolo efficiente nel caso importante in cui f (x, y) è base :: norma (xy, type = 'F').

+1

Sarebbe utile conoscere anche il formato $ f (.) $. Ad esempio, per un banale kernel lineare tutto quello che devi fare è moltiplicare un argomento con la sua trasposizione. Quindi, potrebbe dipendere dalla definizione di $ f (.) $ – PraneethVepakomma

risposta

1

È possibile utilizzare outer con le dimensioni della matrice.

n <- 10 
p <- 5 
A <- matrix(rnorm(n*p), n, p) 
f <- function(x,y) sqrt(sum((x-y)^2)) 
B <- outer( 
    1:n, 1:n, 
    Vectorize(function(i,j) f(A[i,], A[j,])) 
) 
Problemi correlati