【问题标题】:How come these two matrices are not equivalent?为什么这两个矩阵不等价?
【发布时间】:2018-07-26 22:18:48
【问题描述】:

假设我们有一个 3 维数组 F 和一个 2 维矩阵 S。 首先我找到一个矩阵Y,它是F 乘以S。然后我尝试从Y 中找到F 的估计值(我们称之为F_est)作为我代码中的健全性检查。 谁能看出逻辑上的缺陷,我似乎不知道为什么F_est 不完全是F

F= randn(2,4,600);
S= randn(4,600);
for i =1:size(F,1);
    for j=1:size(F,2)
        for k= 1:size(F,3)
            Y(i,k)= F(i,j,k) * S(j,k);
        end
    end
end

for i =1:size(F,1)
    for j=1:size(F,2)
        for k= 1:size(F,3)
            F_est(i,j,k)= Y(i,k) / S(j,k);
        end
    end
end

然后我尝试查看F_est - F 是否为零,而不是。有任何想法吗。非常感谢。

**** 在 cmets 之后编辑

根据我得到的答案,我想知道下面的代码是否有意义?

for k=1:size(F,3)
Y(:,k) = squeeze(F(:,:,k)* S(:,k)
end

如果我有 Y 和 S,我能恢复 F 吗?

【问题讨论】:

  • 你能举个例子吗?
  • 谢谢@AnderBiguri,所以这部分更大的代码我有输入FS的mat文件,但我用randn编辑了这个问题,但我的奇怪观察仍然成立
  • 如果“非零”在 1e-12 左右:stackoverflow.com/questions/686439/…
  • @AndrasDeak 不是这样
  • 关于您的更新:没有。我的意思是你仍然无法从Y 得到F,因为矩阵乘积不能那么容易地反转。

标签: arrays matlab


【解决方案1】:

当您创建Y 时,您会不断地替换它的值。对于 i,k 对的任何值,您将覆盖 Y jtimes!

这两个代码不等价,因为F_est(i,j,k) 只计算了一次,但你有Y(i,k) j 次。

我不知道您要做什么,但是未定义 3D 矩阵乘以 2D 矩阵的乘法,并且它不是 2D 矩阵

【讨论】:

  • 你的意思是Y只包含来自二维平面F(:,size(F,2),:)的信息,所以F的其余部分无法恢复。
  • @CrisLuengo 确实如此。虽然它只是糟糕的数学,但你不能将这些东西相乘。
  • 嗯,技术上你可以。它只是没有任何意义。 :)
  • @AnderBiguri 谢谢!我编辑了这个问题。你能帮我完成最后一部分吗?
  • @Tyrone 你需要摆脱代码,回到纸上。你不能创建 Y,所以不,你不能恢复 F。停止尝试随机代码。如果您需要帮助,我建议您打开一个新问题来解释您正在尝试解决的真正问题,而不是您尝试的代码。
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 2011-03-18
  • 2020-07-16
  • 2018-01-21
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多