summing elements of an array until a value appears
조회 수: 4 (최근 30일)
이전 댓글 표시
I'm trying to execute a for loop that looks at permutations of a set and sums all the elements until a specific element 'k' is reached.
rather than sum(line(1:k)) i need effectively sum(line(1:'k')) but inputting that exactly doesn't work. Any ideas?
if sum(line(1:k))>=q && (sum(line(1:k))-k)<q
댓글 수: 4
채택된 답변
Mohammad Sami
2020년 1월 29일
a = [1 1 1 2 3 4 2];
i = find(a==2,1,'first');
if ~isempty(i)
val = sum(a(1:i));
else
val = sum(a);
end
댓글 수: 0
추가 답변 (2개)
the cyclist
2020년 1월 29일
Here is one way.
% Inputs
inputVector = [5 4 3 2 1];
inputValueToFind = 2;
% Find the location of the index
idxEnd = find(inputVector==inputValueToFind,1);
% Sum up to that index
sum(inputVector(1:idxEnd))
댓글 수: 0
Turlough Hughes
2020년 1월 29일
편집: Turlough Hughes
2020년 1월 29일
Say your array is called data:
q=2;
data = [1 2 3; 1 3 2; 2 1 3; 1 0 3; 1 2 2]; % Includes rows without any values = q, and repeated q.
You could then get the cumulative sum of values up to the first occurence of q in each row as follows:
[ ~,k ] = max(data == q,[],2); % Index for first column equal to q in each row.
k(~any(data == q,2)) = 0 % Case for rows that have no values == q.
for c = 1:numel(k)
csums(c,1) = sum( data(c,1:k(c)) );
end
Here, data == q is a logical array of all values in data that are equal to q. Taking the max along each row will return the "first" index for a given row in data being equal to q. The second line accounts for cases where no values are equal to q.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!