矩阵除零-零和nan

  • 本文关键字:零和 nan matlab matrix bsxfun
  • 更新时间 :
  • 英文 :


我正试图将精度矩阵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。

我的问题是:为什么它们的行为不同,我如何改变第二个单行方法,使其表现为基于循环的方法?我相信后一种解决方案应该在大型矩阵上明显更快。

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

您的基于bsxfun的方法是执行每个元素的划分,即每个单独的元素是颠倒的。没有办法使用bsxfun对3D数组中包含的每个2D矩阵执行矩阵运算。

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

相关内容

  • 没有找到相关文章

最新更新