I have a 5x6 matrix. I want to calculate sum of only those values which are consecutive nonzero along each row. How to do that? The desired result given in description box.
3 ビュー (過去 30 日間)
古いコメントを表示
a = [2 3 1 4 0 0;
0 0 0 0 0 0;
0 0 1 5 7 0;
0 0 0 0 4 0;
4 5 0 0 6 8];
desired_result = [10;0;13;0;23]
4 件のコメント
the cyclist
2023 年 6 月 24 日
I believe a correct re-statement of the rule is, "Sum all non-zeros that are next to at least one other non-zero."
採用された回答
the cyclist
2023 年 6 月 24 日
編集済み: the cyclist
2023 年 6 月 24 日
I believe this does what you want:
% Input
a = [2 3 1 4 0 0;
0 0 0 0 0 0;
0 0 1 5 7 0;
0 0 0 0 4 0;
4 5 0 0 6 8];
% Append columns of zeros at both ends, because we are going to check in
% the next line if an element is a "singleton" with zeros on both sides
b = [zeros(height(a),1) a zeros(height(a),1)];
% Identify the non-singleton value (i.e. the ones that do not have zeros on either side)
includeInSum = not((b(:,1:end-2) == 0) & (b(:,3:end)==0));
% Sum the values that should be included
result = sum(a.*includeInSum,2)
0 件のコメント
その他の回答 (1 件)
Image Analyst
2023 年 6 月 24 日
a = [2 3 1 4 0 0;
0 0 0 0 0 0;
0 0 1 5 7 0;
0 0 0 0 4 0;
4 5 0 0 6 8];
desired_result = [10;0;13;0;23]
desired_result = sum(a, 2)
To learn other fundamental concepts, invest 2 hours of your time here:
2 件のコメント
Image Analyst
2023 年 6 月 24 日
Row 4 has one "consecutive' value, so why not sum it in? Do you want to sum in values only if the run of non-zero values is 2 or more? See @the cyclist's answer below. Is it homework? If so you can't use it.
This looks like a homework problem. If you have any questions ask your instructor or read the link below to get started:
Obviously we can't give you the full solution because you're not allowed to turn in our code as your own.
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!