奇异值分解Matlab

奇异值分解Matlab,matlab,svd,Matlab,Svd,我正在研究上述主题,并尝试在Matlab中使用SVD代码。我想知道有人能解释一下下面这行代码的作用吗 Sh(logical(eye(size(Sh)))) = Sh_diag; 其余的我都能理解,只是这一行代码让我困惑。我试过在调试器中运行,但仍然无法理解!我相信eye返回一个单位矩阵,并且logical将Sh转换为1和0??但我不知道它们是如何协同工作的,特别是在Sh的size的情况下?先谢谢你 %Apply SVD to img1 [Uh Sh Vh] = svd(img1); % Ap

我正在研究上述主题,并尝试在Matlab中使用SVD代码。我想知道有人能解释一下下面这行代码的作用吗

Sh(logical(eye(size(Sh)))) = Sh_diag;
其余的我都能理解,只是这一行代码让我困惑。我试过在调试器中运行,但仍然无法理解!我相信
eye
返回一个单位矩阵,并且
logical
Sh
转换为1和0??但我不知道它们是如何协同工作的,特别是在
Sh
size
的情况下?先谢谢你

%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;%%%????%%
%将SVD应用于img1
[Uh Sh Vh]=svd(img1);
%将奇异值分解应用于img2
[Uw-Sw-Vw]=svd(img2);
%将img1的奇异值替换为
%img2的奇异值
Sh_diag=diag(Sh);
Sw_diag=diag(Sw);
如果(长度(img2)>=256)
Sh_-diag(1:length(Sh),:)=Sw_-diag(1:length(Sh),:);
elseif(长度(隐藏长度)<256)
Sh_图(1:length(img2),:)=Sw_图(1:length(img2),:);
结束
Sh(逻辑(眼睛(大小(Sh)))=Sh_诊断;%%%??%
size(Sh)
返回矩阵的维度
Sh

eye(size(Sh))
创建一个与
Sh
尺寸相同的单位矩阵

logical(eye(size(Sh)))
将标识矩阵的元素转换为逻辑值

Sh(…)
正在使用选择
Sh
的子矩阵。这里看起来它只是得到了
Sh
的对角线元素

Sh(…)=Sh_diag
正在用
Sh_diag
替换前面提到的子矩阵


总之,这就是选择
Sh
的对角线元素,并用
Sh_diag

中的值替换它们。您是否尝试过在MATLAB文档中查找函数?您在所有方面都是正确的
eye(size(Sh))
生成与Sh大小相同的标识矩阵。逻辑索引需要转换为逻辑。整个过程选择数组Sh的对角线,command
diag
也这样做。只需注意:我实际上认为这是一个合理的问题-我认为很难从该表达式开始,并计算出需要计算MATLAB的逻辑索引如何工作,以查看它是否覆盖了主对角线。这是关于逻辑索引的文档谢谢Alex,你的回答帮助我理解了…非常清楚的解释!