Xem xét ma trận đầu vào X và Y của các hình dạng (m, m) và (n, n) tương ứng . Là một đầu ra, chúng ta cần đưa ra một ma trận hình dạng (mn, mn) sao cho nó nhân các mục tương ứng trong hai ma trận. Hai ma trận X và Y này đại diện cho ma trận chuyển tiếp. Một ví dụ sau đây có thể được thực hiện để minh họa cho đầu ra yêu cầu. Ở đây, X là ma trận 3 * 3 và Y là ma trận 2 * 2.Hiệu quả tính toán sản phẩm khôn ngoan của ma trận chuyển tiếp (m * m) * (n * n) để cung cấp ma trậ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
.
.
Sau đây là một chức năng không vectorized Tôi đã viết cho nhiệm vụ này:
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))
tôi làm nhận được đầu ra yêu cầu nhưng nhận ra rằng các phiên bản không vectorized sẽ rất chậm. Điều gì sẽ là cách tốt nhất để vector hóa tính toán này, sử dụng Numpy.
Đối với những người quan tâm đến lý do tính toán này là cần thiết. Nó là cần thiết trong việc tạo ma trận chuyển tiếp của một mô hình Factorial Hidden Markov từ các ma trận chuyển đổi thành phần.
Tuyệt vời! Đã lãng phí quá nhiều thời gian để tự mình viết mã! Cảm ơn –