[R-br] Junção de dados no mclapply
Junior Beleti
beleti.junior em gmail.com
Sexta Dezembro 21 10:52:00 BRST 2012
Bom dia a todos.
Estou realizando experimentos para execução paralela. Para isso criei uma
função que realiza a multiplicação de matrizes na sua forma digamos
"primitiva", ou seja, como na matemática mesmo, realizando a multiplicação
linha por coluna.
Sei que existe o operador %*% que já realiza a multiplicação matricial,
porém, como já disse antes, estou apenas realizando experimentos.
Segue código:
m1 <- matrix(0,3,3) #criando matriz
m1[1,1]<-1
m1[1,2]<-2
m1[1,3]<-3
m1[2,1]<-4
m1[2,2]<-1
m1[2,3]<-4
m1[3,1]<-2
m1[3,2]<-3
m1[3,3]<-2
m2 <- matrix(0,3,3) #criando matriz
m2[1,1]<-2
m2[1,2]<-1
m2[1,3]<-2
m2[2,1]<-3
m2[2,2]<-4
m2[2,3]<-1
m2[3,1]<-2
m2[3,2]<-3
m2[3,3]<-3
m3 <- matrix(0,3,3) #criando matriz
numlinha<-3
numcoluna<-3
N<-3
#funcao que realiza a multiplicação
myf = function(N,mat1,mat2,num,x,y){
num + (mat1[x,N] * mat2[N,y])
}
#forma sequencial (já testada e que está correta)
aux <-0
for(i in 1:numlinha){
for(j in 1:numcoluna){
for(k in 1:N){
aux <-myf(k,m1,m2,aux,i,j)
}
m3[i,j] <- aux
aux <-0
}
}
## resultado da execucao:
## matriz m1 multiplicada pela matriz m2 que gera a matriz m3
> m1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 1 4
[3,] 2 3 2
> m2
[,1] [,2] [,3]
[1,] 2 1 2
[2,] 3 4 1
[3,] 2 3 3
> m3
[,1] [,2] [,3]
[1,] 14 18 13
[2,] 19 20 21
[3,] 17 20 13
Se eu fosse utilizar a função mclapply, ao invés das tres repetições (for),
bastaria colocar:
require(parallel)
aux <- 0
for(i in 1:numlinha){
mclapply(1:numcoluna,function(h){
for(k in 1:N){
aux <-myf(k,m1,m2,aux,i,h)
}
m3[i,h] <- aux
aux <-0
},mc.cores=2)
}
O problema é que não consigo armazenar os valores em cada posição da matriz
(m3[i,h] <- aux), ou seja, ele não salva na matriz de destino m3, visto que
isso ocorre dentro da chamado ao mclapply. Tentei utilizar o "unlist" mas
não obtive sucesso.
Alguem pode me auxiliar com isso?
Att,
Junior Beleti.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121221/1f1b34b3/attachment.html>
Mais detalhes sobre a lista de discussão R-br