在 MATLAB 中将数组的重叠列重塑为向量

Reshaping, overlapping columns of array into vector in MATLAB

我想按列将一个数组重塑为一个向量,并且我想在每列之间有一个偏移量,并将重叠的元素加在一起。 有任何想法吗?我已经使用双 for 循环完成了它,但我希望有更高效的东西......

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