【问题标题】:Singular Values Decomposition Matlab奇异值分解 Matlab
【发布时间】:2015-02-26 23:46:58
【问题描述】:

我正在研究上述主题并尝试在 Matlab 中使用 SVD 代码。我想知道任何人都可以解释以下代码行的作用吗?

Sh(logical(eye(size(Sh)))) = Sh_diag;

其余的我都能理解,只是这行代码让我不解。我试过在调试器中运行,但仍然无法理解!我相信eye 返回一个单位矩阵,logicalSh 转换为 1 和 0?但我无法弄清楚它们是如何协同工作的,尤其是与sizeSh?提前谢谢你。

%Apply SVD to img1
[Uh Sh Vh] = svd(img1);

% Apply SVD to img2
[Uw Sw Vw] = svd(img2);

% Replace singular values of the img1 with the
% singular values of the img2
Sh_diag = diag(Sh);
Sw_diag = diag(Sw);


if (length(img2) >= 256)
    Sh_diag(1:length(Sh), :) = Sw_diag(1:length(Sh), :);
elseif(length(hidden_img) < 256)
    Sh_diag(1:length(img2), :) = Sw_diag(1:length(img2), :);
end
Sh(logical(eye(size(Sh)))) = Sh_diag;%%%????%%

【问题讨论】:

  • 您是否尝试过在 MATLAB 文档中查找函数?
  • 你在所有方面都是对的; eye(size(Sh)) 生成一个与 Sh 大小相同的单位矩阵。逻辑索引需要转换为逻辑。整个过程选择了数组 Sh 的对角线,命令 diag 也可以。
  • 请注意:我实际上认为这是一个合理的问题 - 我认为从该表达式开始并计算出您需要弄清楚 MATLAB 的逻辑索引如何工作才能看到它被覆盖是非常困难的主对角线。这是关于逻辑索引的文档mathworks.com/help/matlab/math/matrix-indexing.html#bq7egb6-1

标签: matlab svd


【解决方案1】:

size(Sh)返回矩阵Sh的维度。

eye(size(Sh)) 创建一个与Sh 具有相同维度的单位矩阵。

logical(eye(size(Sh))) 将单位矩阵的元素转换为逻辑值。

Sh(...) 正在使用logical indexing 选择Sh 的子矩阵。这里看起来只是获取Sh 的对角线元素。

Sh(...) = Sh_diag 将上述子矩阵替换为Sh_diag

总而言之,这是选择Sh 的对角线元素并将它们替换为Sh_diag 中的值。

【讨论】:

  • 谢谢亚历克斯,你的回答帮助我理解了......一个非常清楚的解释!
猜你喜欢
  • 2015-03-29
  • 2013-02-02
  • 2011-06-30
  • 2023-03-15
  • 2023-03-22
  • 1970-01-01
  • 2010-10-31
  • 2010-10-06
  • 2011-09-28
相关资源
最近更新 更多