how to do this calculation not by 'for' cycle?
    조회 수: 1 (최근 30일)
  
       이전 댓글 표시
    
I have the below data:
data =[...
  1.0000    1.0000    1.0000   53.1100;...
  1.0000    2.0000    2.0000   59.0900;...
  2.0000    1.0000    2.0000   71.3100;...
  2.0000    2.0000    1.0000   70.2400]
Now I want to get a 'variable'--Data as below:
Data=[53.11+59.09  53.11+71.31  53.11+70.24;
      71.31+70.24  59.09+70.24  59.09+71.31]
I can get 'Data' by 'for' cycle function but I want to do this work by other better method.
The addition logic is that:
take column 2 of data for example, both data(1,2) and data(3,2) equal 1.0000, so add data(1,4) and data(3,4) to get Data(1,2).
댓글 수: 0
채택된 답변
  Guillaume
      
      
 2015년 12월 15일
        One possible way to do it:
data = [1    1    1   53.1100
        1    2    2   59.0900
        2    1    2   71.3100
        2    2    1   70.2400];
%first split data into two matrices for easier referencing:
rowdest = data(:, 1:end-1);
rowvals = data(:, end);
%second create matrix of column indices
coldest = repmat(1:size(rowdest, 2), size(rowdest, 1), 1);
%third use accumarray to compute the sum:
newdata = accumarray([rowdest(:) coldest(:)], repmat(rowvals, size(rowdest, 2), 1))
댓글 수: 0
추가 답변 (1개)
  Stephen23
      
      
 2015년 12월 15일
        
      편집: Stephen23
      
      
 2015년 12월 15일
  
      inp = [1,1,1,53.1100;1,2,2,59.0900;2,1,2,71.3100;2,2,1,70.2400]
out(:,3) = accumarray(inp(:,3),inp(:,4));
out(:,2) = accumarray(inp(:,2),inp(:,4));
out(:,1) = accumarray(inp(:,1),inp(:,4))
and the result is:
out =
   112.20   124.42   123.35
   141.55   129.33   130.40
and your example output is:
>> [53.11+59.09,53.11+71.31,53.11+70.24;71.31+70.24,59.09+70.24,59.09+71.31]
ans = 
   112.20   124.42   123.35
   141.55   129.33   130.40
댓글 수: 1
  Guillaume
      
      
 2015년 12월 15일
				If data is always three columns of indices + one column of number, this works. If the size of data is not fixed, my answer is more generic.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

