Arrays 为什么这两个矩阵不相等?

Arrays 为什么这两个矩阵不相等?,arrays,matlab,Arrays,Matlab,假设我们有一个三维数组F和二维矩阵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) *

假设我们有一个三维数组
F
和二维矩阵
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是否为零。任何想法。非常感谢

****评论后编辑

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

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

如果我有Y和S,我是否能够恢复F?

当您创建
Y
时,您将不断替换其值。对于
i,k
对的任何值,您正在覆盖
Y
j

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


我不知道你想做什么,但是3D矩阵与2D矩阵的乘法没有定义,也不是2D矩阵

你能举个数字例子吗?谢谢@AnderBiguri,所以这部分更大的代码我有mat文件输入
F
S
,但我用randn编辑了这个问题,我的奇怪观察仍然成立如果“非零”在1e-12左右:@AndrasDeak这不是关于你的更新:不。我的意思是你仍然无法从
Y
获得
F
,因为矩阵积不能那么容易地反转。你的意思是
Y
只包含二维平面
F(:,size(F,2),:)
的信息,所以
F
的其余部分无法恢复。@CrisLuengo确实如此。这只是糟糕的数学,你不能把这些东西相乘,技术上你可以。这并不意味着什么@谢谢你!我编辑了这个问题。你能帮我完成最后一部分吗?@Tyrone你需要摆脱代码,回到纸上。你不能创建Y,所以不,你不能恢复F。停止尝试随机代码。如果您需要帮助,我建议您打开一个新问题,解释您要解决的真正问题,而不是您尝试的代码。