假设我在 Matlab 中有以下矩阵:
A = [1 2 3
4 5 6
7 8 9
3 2 1
6 5 4];
现在假设我想要一个向量如下:
v = [1 4 7 3 6 0 0 0 0 0 0] + [0 0 0 2 5 8 2 5 0 0 0] + [0 0 0 0 0 0 3 6 9 1 4];
也就是说,我想按列读取 A 但我希望每列的最后 2 个元素与下一列的前 2 个元素相加(第一列的最后一个元素与第二个元素第 2 列,第 1 列的第 4 个元素与第 2 列的第 1 个元素,等等)
现在,如果 A 的维度非常大,我如何在没有循环的情况下有效地完成这个过程?
感谢您的回答。
最佳答案
您可以从零填充列创建一个稀疏矩阵并沿其第二个维度求和:
s = size(A);
f = s(1) - 2;
r = (1:s(1)).' + (0:f:(s(2) - 1) * f);
c = repmat(1:s(2), s(1), 1);
M = sparse(r, c, A);
v = full(sum(M, 2));
关于arrays - 将列末尾的元素与下一行开头的元素相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65891085/