Taking expectation of 3 dimension matrix
3 次查看(过去 30 天)
显示 更早的评论
Hi,
I am trying to take the expectation of a function on two variables where the probabilities are markov process and it is 3dimension.
E(v(a',b',c'))= Sum(sum(v(a,b,c)*Q(b,b')*Q(c,c'))) where sums are on b and c and Q are the transition matrices.
I found it as below but i need to make it faster.
Nk=100, Nz=5, Ne=4
v_n=rand(Nk,Nz,Ne)
Q_z(Nz,Nz) is 5*5 transition matrix where sum of each row makes 1
Q_e(Ne,Ne) is 3*3 transition matrix where sum of each row makes 1
for ik=1:Nk
for iz=1:Nz
for ie=1:Ne
asd(ik,iz,ie)=dot(Q_e(ie,:),squeeze(v_n(ik,iz,:)));
end
end
end
for ik=1:NkPts
for iz=1:Nz
for ie=1:Ne
expv_n(ik,iz,ie)= dot(Q_z(iz,:),squeeze(asd(ik,:,ie)));
end
end
end
0 个评论
回答(1 个)
Neelanshu
2023-11-6
Hi Mert Demir,
I understand that you are facing an issue related to finding a faster way to compute the expectation of 3 dimensional matrix.
The “for” loops in the code when converted to matrix operations will be much faster. For instance, replacing
for ie=1:Ne
asd(ik,iz,ie) = dot(Q_e(ie,:),squeeze(v_n(ik,iz,:)));
end
with
asd(ik,iz,:) = dot(Q_e,repmat(squeeze(v_n(ik,iz,:))',4,1),2);
will improve the computation time significantly.
You can refer the following link to transform the remaining “for” loops with matrix operations: https://www.mathworks.com/help/matlab/matrices-and-arrays.html?s_tid=CRUX_lftnav
Hope it helps,
Regards,
Neelanshu
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multidimensional Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!