我试图在没有循环的情况下编写Tyler鲁棒协方差估计:
这是我目前的实施:
这是当前的实现:
invCov = pinv(oldCov);
for i = 1:n
cov = cov + x(i,:).'*x(i,:)/sum(x(i,:)*invCov.*x(i,:),2);
end
现在这是我的问题:
我有兴趣尝试通过使用其他后处理技术来进一步提高估计稳健性。为此,最好结果不是总和而是矢量" covElements"每个
的大小为[bxbxn]covElements(:,:,i)= x(i,:)。' * x(i,:)/ sum(x(i,:)* invCov。* x(i,:), 2);
答案 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;