在MATLAB

时间:2015-07-09 15:32:27

标签: arrays matlab vector reshape overlap

我希望通过其列将数组重新整形为矢量,并且我想在每列之间有一个偏移,并将重叠元素添加到一起。 有任何想法吗?我使用双循环来完成它,但我希望有更高效的东西...

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 ]

然后使用每列的和来获得一个新的向量,其元素是列的总和。 有谁知道创建这种对角矩阵的快捷方法?

1 个答案:

答案 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