Adding values in an array within limits

1 回表示 (過去 30 日間)
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 3 月 29 日
編集済み: Stephen23 2017 年 3 月 29 日
Hi all,
I have a vector A=[1 2 3 4 5 4]'
I would like to get from vector A, a vector B where its elements are the same with A, until the cumulative sum becomes 9. When the limit of 9 is reached the rest of the elements will be zero.
So the vector B will be : B=[1 2 3 3 0 0]'
I don't know if I explained it well
thanks in advance
Nikolas

採用された回答

Adam
Adam 2017 年 3 月 29 日
編集済み: Adam 2017 年 3 月 29 日
B = zeros( size( A ) );
validIdx = cumsum( A ) <= 9;
B( validIdx ) = A( validIdx );
B( nnz( validIdx ) + 1 ) = 9 - sum( B );
would work, assuming you just clip the final value so you have a sum of 9.

その他の回答 (1 件)

Stephen23
Stephen23 2017 年 3 月 29 日
>> A = [1;2;3;3;5;4];
>> B = A.*(cumsum(A)<=9)
B =
1
2
3
3
0
0
  2 件のコメント
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 3 月 29 日
Basically my vector is A = [1;2;3;4;5;4]; not A = [1;2;3;3;5;4];
thanks!
Stephen23
Stephen23 2017 年 3 月 29 日
編集済み: Stephen23 2017 年 3 月 29 日
@Nikolas Spiliopoulos: you can use whatever vector you want.
I just used the vector that fitted your desired output, which you gave as "B=[1 2 3 3 0 0]'". Did I guess wrong? If you could please explain the reason for why the fourth elements of A and B should be different, then I can show you how to achieve what you want.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeNaNs についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by