Subtracting within a Matrix

2 次查看(过去 30 天)
I have this matrix:
1 0
1 2
1 3
2 3
2 4
3 1
3 6
In the second column, I need to find the highest and lowest number that are associated with the same number in the first column, and then subtract the two. In row 1, the numbers 1 and 0 exist. In row 3, the numbers 1 and 3 exists. I need to subtract the 3 and the 0 and get 3 as my output.
The output should be a matrix that looks like this:
1 3
2 1
3 5
Also if a number in the first column only occurs once
1 0
1 2
1 3
2 3
2 4
3 1
3 6
4 5
Then the number in the second column associated with it in the output matrix should be a 0.
1 3
2 1
3 5
4 0

采纳的回答

Joseph Cheng
Joseph Cheng 2015-10-13
you can use the built in function unique to determine this:
A =[ 1 0; 1 2; 1 3; 2 3; 2 4; 3 1; 3 6; 4 5]
[c1,ia1,ic1] = unique(A(:,1));
for ind = 1:length(c1)
tempMIN = min(A(ind==A(:,1),2));
tempMAX = max(A(ind==A(:,1),2));
tostore = tempMAX-tempMIN
end
also you maybe able to do this simpler with accumarray().

更多回答(1 个)

Star Strider
Star Strider 2015-10-13
编辑:Star Strider 2015-10-13
The accumarray approach:
M = [ 1 0
1 2
1 3
2 3
2 4
3 1
3 6
4 5];
Mu = unique(M(:,1));
R = accumarray(Mu, Mu, [], @(x)[max(M(M(:,1)==Mu(x),2))-min(M(M(:,1)==Mu(x),2))]);
Result = [Mu R]
Result =
1 3
2 1
3 5
4 0

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by