arrays - 将列末尾的元素与下一行开头的元素相加

标签 arrays performance matlab matrix

假设我在 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/

相关文章:

android - 如何在 android 打开 URL 连接中发送 Json 数组作为 post 参数

arrays - 许多子数组求和查询

performance - 有没有办法在读取许多文件时并行化 spark.read.load(string*) ?

javascript - 交替 ng 重复

c - 二维数组未打印预期答案

c# - 在 PHP 中将字节数组转换为字符串

python - Matlab delaunayn 和 Scipy Delaunay 之间的区别

c# - 代码性能 : SQL Server Query vs C#.Net web 应用程序

matlab - 在字符串中添加撇号 - Matlab

matlab - 为 Matlab Coder 定义可变大小输入数据