How to find cell position in a column based on sum of column.
2 次查看(过去 30 天)
显示 更早的评论
Hi,
I have a 365x500 matrix (A). How to calculate another matrix B (3x500) such that each row of matrix B contains:
row1: sum of each column (I did this)
row2: 50% of sum of each column (ie. 0.5*values in row1) (I did this)
row3: positions of the cells in each column of matrix (A) such that cumulative sums of all the previous cells in each column of A is less than or equal to values in row2 (50% of sum of each column).
Thanks in advance.
0 个评论
采纳的回答
Adam Danz
2019-11-21
编辑:Adam Danz
2019-11-21
B(1,:) = sum(A);
B(2,:) = B(1,:)/2;
B(3,:) = sum(cumsum(A)<=B(2,:));
% sanity check
% Checks that the cumulative sums of each column in A up until the
% row numbers identified in B(3,:) are <= B(2,:) and that the
% cumulative sum of each column in A up until the rows B(3,:)+1 exceed
% the values in B(2,:)
Ac = cumsum(A);
allTrue = all(Ac(sub2ind(size(A),B(3,:),1:size(A,2))) <= B(2,:));
allFalse = ~any(Ac(sub2ind(size(A),B(3,:)+1,1:size(A,2))) <= B(2,:));
if ~allTrue || ~allFalse
error('Something''s wrong.')
end
更多回答(1 个)
Ridwan Alam
2019-11-21
A = rand(365,500);
B = zeros(3,500);
B(1,:) = sum(A);
B(2,:) = sum(A)/2;
B(3,:) = sum((B(2,:)-cumsum(A))>0);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!