我希望通过其列将数组重新整形为矢量,并且我想在每列之间有一个偏移,并将重叠元素添加到一起。 有任何想法吗?我使用双循环来完成它,但我希望有更高效的东西...
for i=1:b
for j=1:a
overlap=j+(i-1)*offset;
vector(overlap) = vector(overlap) + (array(j,i));
end
end
例如我想要:
[ 1 4 7 ]
[ 2 5 8 ]
[ 3 6 9 ]
并且列之间的偏移量为1,那么我想得到以下的向量:
[ 1 2 7 5 13 8 9 ]
编辑我想添加零,然后像这样添加每列
[ 1 2 3 0 0 0 0 ]
[ 0 0 4 5 6 0 0 ]
[ 0 0 0 0 7 8 9 ]
然后使用每列的和来获得一个新的向量,其元素是列的总和。 有谁知道创建这种对角矩阵的快捷方法?
答案 0 :(得分:0)
基本上你需要的是这个矩阵的通用公式:
[ 1 2 3 0 0 0 0 ]
[ 0 0 4 5 6 0 0 ]
[ 0 0 0 0 7 8 9 ]
如果我们按如下方式重写矩阵,这会更容易一些:
[ 1 2 3 0 0 0 0 0 0 4 5 6 0 0 0 0 0 0 7 8 9 ]
我将说明没有证据证明每组非零数字之间的零数等于:
nz = (size(array,1) - overlap) * size(array,2);
你应该能够说服自己这很容易。现在我们可以做到以下几点:
vector = [array;zeros(nz,size(array,2)];
vector = vector(1:end-nz);
给出了
vector = [ 1 2 3 0 0 0 0 0 0 4 5 6 0 0 0 0 0 0 7 8 9 ]
然后我们重塑并总结:
vector = sum(reshape(vector,[],size(array,2))');
vector =
1 2 7 5 13 8 9