summing elements of an array until a value appears
5 次查看(过去 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
采纳的回答
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!