arrays - Matlab:将矩阵 reshape 为一维数组,并将重叠元素加在一起

标签 arrays matlab matrix

这是一个示例矩阵:

x=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15]'; % 1:5 in 1st column, 6:10 in 2nd etc

所以我有:

x=
1 6  11
2 7  12
3 8  13
4 9  14
5 10 15

我想将给定列的上半部分元素(不包括中间元素)与前一列的下半部分重叠,在重叠部分添加元素。第一列和最后一列显然是异常(exception)(第一列没有前一列,也没有任何内容可以添加到最后一列)

在上面的简单示例中,为了清楚起见,我重写了该行以显示要重叠的数字:

x=[1,2,3,4,5;
         6,7,8,9,10;
               11,12,13,14,15]';

因此,我希望结果是:

y=[1;2;3;4+6;5+7;8;9+11;10+12;13;14;15];

现在,这只是一个非常简单的例子。生成的代码需要很好地扩展/有效地运行大数据。矩阵的大小可能类似于 120000x600,我认为生成的一维数组将类似于 37000000x1

最佳答案

原始问题的答案(添加移动的):

这可以按如下方式完成:

  1. 生成索引向量 (ind),使要求和的 x 条目具有相同的索引。这可以通过 bsxfun 来完成.索引可以计算一次并重复用于不同的 x 向量(索引不依赖于 x)。
  2. 使用该索引向量与accumarray 求和:

代码:

n = ceil(size(x,2)/2);
ind = bsxfun(@plus, 1:size(x,2), (0:size(x,1)-1).'*n); %'// step 1. Valid for any x
y = accumarray(ind(:), x(:));                          % // step 2. Depends on x

已编辑问题的答案(添加移动的):

转置 x 并按上述方式进行:

x = x.';
n = ceil(size(x,2)/2);
ind = bsxfun(@plus, 1:size(x,2), (0:size(x,1)-1).'*n);for any x
y = accumarray(ind(:), x(:));

关于arrays - Matlab:将矩阵 reshape 为一维数组,并将重叠元素加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820664/

相关文章:

javascript - 在reactjs中消除项目的问题

c++ - 将 MATLAB 代码转换为 OpenCV C++

Matlab Parfor 变量无法分类

c++ - 在矩阵 C++ 中交换 2 行

r - 从 data.frame 创建二进制矩阵

calloc 导致错误访问

javascript - 将 javaScript 数组添加到 HTML 页面?

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 5

matlab - 我应该如何更新 Matlab 中绘图的数据?

c++ - 创建由 C++ 中的参数输入指定大小的矩阵(二维数组)