我有一个基63行×7列添加多个第n个元素反复
我要选择每7日,8日,9日在正在进行的每个列的值,并添加他们创造新的价值。
即
7 8第九添加到新的值
16 17 18加入到一个新的值...等
25 26 27日
52 53 54th
61 62 63th
所以我应该以7x7矩阵结束。
没有这样做手动,是否有一个简单的命令,以便如果矩阵的尺寸变化,输出将始终是正确的?
我有一个基63行×7列添加多个第n个元素反复
我要选择每7日,8日,9日在正在进行的每个列的值,并添加他们创造新的价值。
即
7 8第九添加到新的值
16 17 18加入到一个新的值...等
25 26 27日
52 53 54th
61 62 63th
所以我应该以7x7矩阵结束。
没有这样做手动,是否有一个简单的命令,以便如果矩阵的尺寸变化,输出将始终是正确的?
你可以轻松地做一些改变。
originalMatrix = (1:63)'*(1:7); %'
[nRows,nCols] = size(originalMatrix); %# =63 in this example
stepSize = 9;
nTriplets = floor(nRows/stepSize); %# =7 in this example
%# create index list
idx = bsxfun(@minus,stepSize:stepSize:nRows,[2 1 0]'); %'
idx = idx(:); %# reshape to a vector
%# create 3-by-7-by-7 array from original matrix
tmpMatrix = reshape(originalMatrix(idx,:),3,nTriplets,nCols);
%# sum along dim 1 (to sum e.g. the 7th, 8th, and 9th value)
result = squeeze(sum(tmpMatrix,1));
result =
24 48 72 96 120 144 168
51 102 153 204 255 306 357
78 156 234 312 390 468 546
105 210 315 420 525 630 735
132 264 396 528 660 792 924
159 318 477 636 795 954 1113
186 372 558 744 930 1116 1302
matrix=(1:63)'*(1:7);
n=7;
startind = n:(n+2):size(matrix,1);
endind = (n+2):(n+2):size(matrix,1);
tmp=cumsum(matrix);
tmp(endind,:)-tmp(startind,:)
这当然会,只要startind
和endind
具有相同的长度,这将不会是,比如说的情况下,大小62x7的矩阵工作。
如果我已经正确理解你的问题,这段代码应该做你想做的事。但我承认,也许这不是最高效的Matlab代码...
k = 9; n = 7; m = k*n; % 63
A = randi(5,m,n);
startIdx = k*(1:n)+n-k;
endIdx = k*(1:n);
B = zeros(n,n);
for i = 1:n
tmp = A(startIdx(i):endIdx(i),:);
B(i,:) = sum(tmp,1);
end
哪个尺寸会改变? – Jacob