octave - 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
解决方案
您只需要添加第二个 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
。