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.
12 ビュー (過去 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 で Get Started with MATLAB についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!