Рассмотрим входные матрицы X и Y форм (m, m) и (n, n) соответственно , В качестве вывода нам нужно дать матрицу формы (mn, mn), чтобы она умножала соответствующие записи в двух матрицах. Эти две матрицы X и Y представляют собой матрицы перехода. Для иллюстрации требуемого вывода можно привести следующий пример. Здесь X - матрица 3 * 3, а Y - матрица 2 * 2.Эффективно вычисляемый элемент мутного произведения матриц перехода (m * m) * (n * n), чтобы дать (mn * mn) матрицу
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.
Те, кому интересно, почему это вычисление необходимо. Это необходимо для создания матрицы перехода из факториальной скрытой марковской модели из составных матриц перехода.
Отлично! Потрачено слишком много времени, пытаясь закодировать его сам! благодаря –