How to find cell position in a column based on sum of column.

조회 수: 1 (최근 30일)
Parthu P
Parthu P 2019년 11월 21일
댓글: Parthu P 2019년 11월 21일
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.

채택된 답변

Adam Danz
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
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);

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by