【发布时间】:2015-02-26 23:46:58
【问题描述】:
我正在研究上述主题并尝试在 Matlab 中使用 SVD 代码。我想知道任何人都可以解释以下代码行的作用吗?
Sh(logical(eye(size(Sh)))) = Sh_diag;
其余的我都能理解,只是这行代码让我不解。我试过在调试器中运行,但仍然无法理解!我相信eye 返回一个单位矩阵,logical 将Sh 转换为 1 和 0?但我无法弄清楚它们是如何协同工作的,尤其是与size 或Sh?提前谢谢你。
%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