考虑输入矩阵X和Y,其形状分别为(m,m)和(n,n)。我们需要输出一个形状为(mn,mn)的矩阵,使得它乘对应的两个矩阵中的条目。
这两个矩阵X和Y表示转移矩阵。可以采用下面的示例来说明所需的输出。在这里,X是一个3 * 3矩阵,而Y是一个2 * 2矩阵。
以下是我为此任务编写的非矢量化函数:
我确实得到了所需的输出,但意识到非向量化版本会非常慢。使用Numpy矢量化此计算的最佳方法是什么。
对于那些对为什么需要进行此计算感兴趣的人们。这是从组成转换矩阵制作Factorial Hidden Markov模型的转换矩阵所需的。
这两个矩阵X和Y表示转移矩阵。可以采用下面的示例来说明所需的输出。在这里,X是一个3 * 3矩阵,而Y是一个2 * 2矩阵。
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
.
.
以下是我为此任务编写的非矢量化函数:
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))
我确实得到了所需的输出,但意识到非向量化版本会非常慢。使用Numpy矢量化此计算的最佳方法是什么。
对于那些对为什么需要进行此计算感兴趣的人们。这是从组成转换矩阵制作Factorial Hidden Markov模型的转换矩阵所需的。