<div>Bom dia a todos.</div><div><br></div><div>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.</div>
<div><br></div><div>Sei que existe o operador %*% que já realiza a multiplicação matricial, porém, como já disse antes, estou apenas realizando experimentos.</div><div><br></div><div>Segue código:</div><div><br></div><div>
m1 <- matrix(0,3,3) #criando matriz</div><div>m1[1,1]<-1</div><div>m1[1,2]<-2</div><div>m1[1,3]<-3</div><div>m1[2,1]<-4</div><div>m1[2,2]<-1</div><div>m1[2,3]<-4</div><div>m1[3,1]<-2</div><div>m1[3,2]<-3</div>
<div>m1[3,3]<-2</div><div>m2 <- matrix(0,3,3) #criando matriz</div><div>m2[1,1]<-2</div><div>m2[1,2]<-1</div><div>m2[1,3]<-2</div><div>m2[2,1]<-3</div><div>m2[2,2]<-4</div><div>m2[2,3]<-1</div><div>
m2[3,1]<-2</div><div>m2[3,2]<-3</div><div>m2[3,3]<-3</div><div>m3 <- matrix(0,3,3) #criando matriz</div><div><br></div><div>numlinha<-3</div><div>numcoluna<-3</div><div>N<-3</div><div><br></div><div>#funcao que realiza a multiplicação</div>
<div>myf = function(N,mat1,mat2,num,x,y){</div><div> num + (mat1[x,N] * mat2[N,y])</div><div>} </div><div><br></div><div>#forma sequencial (já testada e que está correta)</div><div>aux <-0</div><div>for(i in 1:numlinha){</div>
<div> for(j in 1:numcoluna){</div><div> for(k in 1:N){</div><div> aux <-myf(k,m1,m2,aux,i,j)</div><div> } </div><div> m3[i,j] <- aux</div><div> aux <-0</div><div> }</div><div>}</div><div><br>
</div><div>## resultado da execucao:</div><div>## matriz m1 multiplicada pela matriz m2 que gera a matriz m3</div><div>> m1</div><div> [,1] [,2] [,3]</div><div>[1,] 1 2 3</div><div>[2,] 4 1 4</div>
<div>[3,] 2 3 2</div><div><br></div><div>> m2</div><div> [,1] [,2] [,3]</div><div>[1,] 2 1 2</div><div>[2,] 3 4 1</div><div>[3,] 2 3 3</div><div><br></div><div>> m3</div><div>
[,1] [,2] [,3]</div><div>[1,] 14 18 13</div><div>[2,] 19 20 21</div><div>[3,] 17 20 13</div><div><br></div><div>Se eu fosse utilizar a função mclapply, ao invés das tres repetições (for), bastaria colocar:</div>
<div><br></div><div>require(parallel)</div><div>aux <- 0</div><div>for(i in 1:numlinha){</div><div> mclapply(1:numcoluna,function(h){</div><div> for(k in 1:N){</div><div> aux <-myf(k,m1,m2,aux,i,h)</div><div>
} </div><div> m3[i,h] <- aux</div><div> aux <-0</div><div> },mc.cores=2)<span class="Apple-tab-span" style="white-space:pre"> </span></div><div>}</div><div><br></div><div>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.</div>
<div><br></div><div>Alguem pode me auxiliar com isso?</div><div><br></div><div>Att,</div><div><br></div><div>Junior Beleti.</div><div><br></div>