Matlab元素矩阵乘法

时间:2014-10-28 03:05:45

标签: matlab

为了减少我的Matlab代码中循环的使用,我试图使用元素乘法来计算矩阵值。以下是我最初的代码

for doc = 1:docs 
    for word = 1:words
        den =0;
        for topic = 1:topics
            posterior(topic,doc,word) =prior(1,topic)*expDoc(doc,topic)*expWord(word,topic);
            den  = den + posterior(topic,doc,word) ;
        end     
    end
end

参考similar问题。以下是我的尝试

 posterior(1:topics,1:docs,1:words) = prior(1,1:topics).*expDoc(1:docs,1:topics).*expWord(1:words,1:topics);
 den = sum(posterior(:,:,:));
 posterior(:,:,:)  =  posterior(:,:,:)/(den);

但是,根据元素运算的要求,如何确保使用相同维度的矩阵进行乘法运算?

1 个答案:

答案 0 :(得分:1)

您可以通过谨慎使用bsxfunpermute来实现这一目标。 permute用于重新排列矩阵维度的顺序 - 我们将使用它来重新排列变量,以正确的顺序将它们与bsxfun相乘。

据我所知,你有三个变量:

prior, size == [1,topics];
expDoc, size == [docs,topics];
expWord, size == [words,topics];

你想得到一个最终变量:

posterior, size == [topics,docs,words]

认为您应该能够使用以下方法获取矩阵posterior

prior_perm = prior.';
expDoc_perm = expDoc.';
expWord_perm = permute(expWord,[2,3,1]);

posterior = bsxfun(@times,prior_perm,bsxfun(@times,expDoc_perm,expWord_perm));

den = sum(posterior(:));

你需要确保测试一下产生正确的输出,但我还没有。