필터 지우기
필터 지우기

How to sum up row values in a matrix?

조회 수: 2 (최근 30일)
Sayanta
Sayanta 2012년 9월 14일
답변: Renda Mohammedjuhar 2019년 4월 30일
Dear All
I have matrix A
A = [ 1 2 3 5;
3 4 5 4;
];
I want to add row values like that using a loop ( without manual input)
A(1,1) + A(1,2) = B1
A(1,3) + A(1,4) = B2
A(2,1) + A(2,2) = B3
A(2,3) + A(2,4) = B4
B= [ B1 B2;
B3 B4
];
How can I do that any tips
Many Thanks in advance
  댓글 수: 6
Yuli Hartini
Yuli Hartini 2017년 1월 2일
Help me please
Image Analyst
Image Analyst 2017년 1월 2일
I'm not sure of your rule, but it looks like you might be doing
Values = cumsum(M(:, end))

댓글을 달려면 로그인하십시오.

채택된 답변

Renda Mohammedjuhar
Renda Mohammedjuhar 2019년 4월 30일
I have a matrix like [1 2 3 4] I want an output [1 3 6 10]

추가 답변 (4개)

Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 14일
편집: Azzi Abdelmalek 2012년 9월 14일
A = [ 1 2 3 5;3 4 5 4]
res=reshape(sum(reshape(A',1,2,[])),2,2)'
%or
res=A(:,[1 3])+A(:,[2 4])
%or
n=size(A,2)/2
res=[sum(A(1,1:n)) sum(A(1,n+1:end)); sum(A(2,1:n)) sum(A(2,n+1:end))]

Image Analyst
Image Analyst 2012년 9월 14일
편집: Image Analyst 2012년 9월 14일
Here's one way:
A = [ 1 2 3 5;
3 4 5 4]
% Get the sliding sum.
a2 = conv2(A, [1 1], 'valid');
% Extract just the first and last column.
output = [a2(:,1) a2(:,3)]

Sayanta
Sayanta 2012년 9월 14일
Hi Image analyst
I have bigger matrix.
A=
0.0018 0.0008 0.0000 0.0000 0.2304 0.7345 0.0159 0.0166
0.0024 0.0016 0.0001 0.0000 0.2161 0.7441 0.0165 0.0192
0.0029 0.0027 0.0002 0.0000 0.2084 0.7475 0.0169 0.0214
0.0034 0.0040 0.0003 0.0000 0.2041 0.7479 0.0172 0.0230
0.0038 0.0055 0.0005 0.0001 0.2016 0.7468 0.0175 0.0243
0.0041 0.0072 0.0007 0.0001 0.1999 0.7450 0.0177 0.0253
0.0044 0.0090 0.0009 0.0001 0.1988 0.7429 0.0178 0.0261
I want to do the operation like your code
% Get the sliding sum
a2 = conv2(A, [1 1], 'valid');
how can I do that
Here I want have to add
A(1,1) + A(1,2) + A(1,3)+ A(1,4) = B1
A(1,5) + A(1,6) + A(1,7)+ A(1,8) = B2
A(2,1) + A(2,2) + A(2,3)+ A(2,4) = B3
A(2,5) + A(2,6) + A(2,7)+ A(2,8) = B4
B = [ B1 B2
B3 B4]
Thanks
  댓글 수: 4
Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 14일
or simpler
n=size(A,2)/2
res=[sum(A(1,1:n)) sum(A(1,n+1:end)); sum(A(2,1:n)) sum(A(2,n+1:end))]
Image Analyst
Image Analyst 2012년 9월 14일
Yeah, that's probably better - more direct - as long as he has a 2 row array. In his example here (which he incorrectly posted as an answer), he has a 7 row by 8 column array. See my build on your solution for when it has any number of rows.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2012년 9월 14일
편집: Image Analyst 2012년 9월 14일
A=[...
0.0018 0.0008 0.0000 0.0000 0.2304 0.7345 0.0159 0.0166
0.0024 0.0016 0.0001 0.0000 0.2161 0.7441 0.0165 0.0192
0.0029 0.0027 0.0002 0.0000 0.2084 0.7475 0.0169 0.0214
0.0034 0.0040 0.0003 0.0000 0.2041 0.7479 0.0172 0.0230
0.0038 0.0055 0.0005 0.0001 0.2016 0.7468 0.0175 0.0243
0.0041 0.0072 0.0007 0.0001 0.1999 0.7450 0.0177 0.0253
0.0044 0.0090 0.0009 0.0001 0.1988 0.7429 0.0178 0.0261]
[rows columns] = size(A)
% Get the sliding sum
a2 = conv2(A, ones(1, columns/2), 'valid')
% Extract just the first and last column.
B = [a2(:,1) a2(:,end)]
Or, building off Azzi's solution and making it work for a 2D array of any number of rows:
B = [sum(A(:,1:columns/2), 2) sum(A(:,(columns/2)+1:end), 2)]
This is probably the most direct way. And it's only 1 line of code instead of 2.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by