首页 > 解决方案 > Octave:对行求和后将表拆分为子表

问题描述

我有一个表,例如表(12,4),其中填充了从 0 到 1 的随机数。我想对表中提到的每一列的 4 行求和。然后,我想将结果存储在一个新的 3x4 表中。在前 4 个结果之后,我尝试计算每列的下 4 行。

为了更清楚,这里有一个例子

0 0.087913 0 0 0.27561 0.17959 0.24402 0.20616 0.040698 0 0.056478 0.0039007 0.10768 0.25992 0.25992 0.25992 0 0.086466 0 0 0.27469 0.18798 0.25542 0.21579 0.04021 0 0.059588 0.0041156 0.092386 0.22962 0.22962 0.22962 0 0.087532 0 0 0.26506 0.18139 0.24646 0.20822 0.037734 0 0.055918 0.0038621 0.099674 0.24774 0.24774 0.24774

每列 4 行的总和,例如:

第一个结果将是 0+0.27561+0.040698+0.10768。

第二个结果将是 0.087913+0.17959+0+0.2599。

这些结果将存储在这样的表中

first result, secondresult, thirdresult, fourthresult fifth result, sixthresult, seventhresult, eighthresult nineth result, tenthresult, eleventhresult, twelfthresult

我尝试对前 4 个这样的结果执行此操作,但我不太确定如何为每 4 列动态执行此操作:

kkx=zeros(12,4);
kkx=rand(12,4);

[nxx,nyy]=size(kkx);

nxxnew=nxx/4
newtable=zeros(3,4)


for ii=1:nyy
    newtable(1,ii)=sum(kkx(1:4,ii));  
endfor

标签: octave

解决方案


您只需要添加第二个 for 循环,它在行数范围内以 4 的步长进行迭代。然后你只需要添加 2 个额外的变量。

rows_ind = 0;
for jj=1:4:nxx
  jj_plus_three = jj + 3;
  rows_ind += 1;
  for ii=1:nyy
      newtable(rows_ind,ii)=sum(kkx(jj:jj_plus_three,ii));  
  endfor
endfor

rows_ind指示newtable将写入下一个总和的行。jj并且jj_plus_three将是将在 column 中求和的行的范围ii


推荐阅读