0

我正在尝试将精度矩阵 sigmaT 转换为协方差矩阵。我尝试了两种方法:

covMat = zeros(size(sigmaT));
for i=1:t
    covMat(:, :, i) = eye(D)/sigmaT(:,:,i);
end

covMat = bsxfun(@rdivide, eye(D), sigmaT);

sigmaT 中的某些元素为零,因此会发生除以零。第一种基于循环的解决方案将发生被 0 除的元素保留为 0,第二种方法将元素设置为 NaN。

我的问题是:为什么它们的行为不同,我怎样才能将第二种单行方法更改为基于循环的方法?我相信后一种解决方案在大型矩阵上应该明显更快。

4

1 回答 1

0

您的基于循环的方法是执行矩阵除法,即每次迭代的结果是矩阵的逆sigmaT(:,:,i)./您可以使用运算符(而不是)调整循环以执行每个元素的数学运算/

bsxfun基于的方法是执行每个元素的划分,即每个单独的元素都被倒置。无法对bsxfun3D 数组中包含的每个 2D 矩阵执行矩阵运算。

这些答案非常不同。您应该使用适合您的问题的任何方法。两者之间的性能差异可能相对较小。

于 2013-03-20T14:11:14.287 回答