2013-05-02 13 views
6

Considerare matrici di input X e Y di forme (m, m) e (n, n) rispettivamente . Come output è necessario fornire una matrice di forma (mn, mn) tale da moltiplicare le voci corrispondenti nelle due matrici. Queste due matrici X e Y rappresentano le matrici di transizione. Un esempio seguente può essere utilizzato per illustrare l'output richiesto. Qui, X è una matrice 3 * 3 e Y è una matrice 2 * 2.Elaborare in modo efficiente il prodotto saggio di matrici di transizione (m * m) * (n * n) per fornire mn * mn) matrice

Matrix X 
-------------- 
    x1 x2 x3  
x1| a b c 
x2| d e f 
x3| g h i 

Matrix Y 
-------------- 
    y1 y2 
y1| j k 
y2| l m 

Matrix Z (Output) 
---------------------------------------- 
     x1y1 x1y2 x2y1 x2y2 x3y1 x3y2 
x1y1| aj ak bj bk cj ck 
x1y2| al am bl bm cl cm 
x2y1| dj dk ej ek fj fk 

. 
. 

seguito è una funzione non vettorizzati ho scritto per questo compito:

def transition_multiply(X,Y): 
    num_rows_X=len(X) 
    num_rows_Y=len(Y) 
    out=[] 
    count=0 
    for i in range(num_rows_X):  
     for j in range(num_rows_Y):   
      out.append([])   
      for x in X[i]: 
       for y in Y[j]:     
        out[count].append(x*y)    
      count+=1 
    return out 

X=[[1,2,3],[2,3,4],[3,4,5]] 
Y=[[2,4],[1,2]] 
import numpy 
print transition_multiply(numpy.array(X),numpy.array(Y)) 

faccio ottenere l'output richiesto, ma si rende conto che la versione non vettorizzati sarebbe molto lento. Quale sarebbe il modo migliore per vettorializzare questo calcolo, usando Numpy.

A coloro che sono interessati perché questo calcolo è necessario. È necessario per creare una matrice di transizione di un modello di Markov nascosto fattoriale dalle matrici di transizione costituenti.

risposta

8

Questo è Kronecker product, vedere here nella documentazione numpy.

+1

Ottimo! Ho perso troppo tempo cercando di codificarlo da solo! Grazie –

Problemi correlati