在 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
我想按列将一个数组重塑为一个向量,并且我想在每列之间有一个偏移量,并将重叠的元素加在一起。 有任何想法吗?我已经使用双 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