我很难理解此代码中的错误:
我有一堆矩阵,我想取每个矩阵的上三角形部分,将其放入一个向量中,用它做一些事情,并将结果映射回去。这是代码:
%%
n=10;
m=3;
% generate a random 'stack of matrices'
bar=randn(n,n,m);
% index the upper triangular part
inds=triu(true(n,n));
% linearize
bar_lin=permute(bar,[3 1 2]);
bar_lin=bar_lin(:,inds);
% de-linearize
foo=zeros(size(bar,3),n,n);
foo(:,inds)=bar_lin;
foo=permute(foo,[2 3 1]);
% why is this not == 0 ??
sum(foo(:)-bar(:))
我无法理解为什么这不起作用!谢谢!
答案 0 :(得分:0)
您的最后一行代码不会返回0
。这是因为bar
变量存储矩阵的上三角部分和下三角部分,而foo仅存储上三角部分。你基本上是在减去这样的东西
bar = [1 2 3;
4 5 6;
7 8 9]
foo = [1 2 3;
0 5 6;
0 0 9]
foo - bar = [ 0 0 0;
-4 0 0;
-7 -8 0]
% Thus it will not be 0 for this case
% even sum(foo(:) - bar(:)) will not be 0
只有当下部(不在foo中的部分)总和为0时,才会将输出设为0(但在随机数的情况下这种情况很少见)