不使用循环就可以对此进行矢量化

时间:2015-11-13 21:39:07

标签: matlab vectorization

我试图在没有循环的情况下编写Tyler鲁棒协方差估计:

这是我目前的实施:

  • x是大小为[nxb]
  • 的样本向量
  • cov是大小为[bxb]
  • 的协方差矩阵
  • oldCov是前一次迭代的协方差矩阵。它也是一个[bxb]矩阵

这是当前的实现:

invCov = pinv(oldCov);
for i = 1:n
    cov = cov + x(i,:).'*x(i,:)/sum(x(i,:)*invCov.*x(i,:),2);
end

现在这是我的问题:

  1. 是否可以在没有循环的情况下对其进行矢量化?
  2. 我有兴趣尝试通过使用其他后处理技术来进一步提高估计稳健性。为此,最好结果不是总和而是矢量" covElements"每个

    的大小为[bxbxn]

    covElements(:,:,i)= x(i,:)。' * x(i,:)/ sum(x(i,:)* invCov。* x(i,:), 2);

  3. 谢谢。

1 个答案:

答案 0 :(得分:1)

逐步逐步,这是一个bsxfunned解决方案 -

%// Vectorize : "sum(x(i,:)*invCov.*x(i,:),2)"
parte1 = sum((x*invCov).*x,2);

%// Vectorize : "x(i,:)/sum(x(i,:)*invCov.*x(i,:),2)"
xp1 = bsxfun(@rdivide,x,parte1);

%// Get vectorized covElements and cov
covElements_out = bsxfun(@times,permute(xp1,[3 2 1]),permute(x,[2 3 1]));
cov_out = xp1.'*x;