Find the difference between all columns of a given row of a matrix
    8 views (last 30 days)
  
       Show older comments
    
I have MXL matrix. For each row, I want to find the absolute difference between the columns, without repeating. For example, if I have a row
a = [a11 a12 a13 a14]
I want to find 
[abs(a11-a12) abs(a11-a13) abs(a11-a14) abs(a12-a13) abs(a12-a14) abs(a13-a14)] 
How can I do that withoug for loops?
EDIT: I found this method
pdist([2 3 1 4]',@(x,y) x-y)
which looks like what I'm looking for, but I need to extend this for a matrix, and perform the above for all rows.
0 Comments
Accepted Answer
  Antoni Garcia-Herreros
      
 on 8 May 2023
        Hello MAWE,
Something like this might work for your case:
A=rand(4,5); % Generate data for the example
perms = nchoosek(1:size(A,2),2); % Find all the possible permutations
D=abs(A(:,perms(:,2))-A(:,perms(:,1))) % Compute the difference
Hope this helps
More Answers (1)
  Luca Ferro
      
 on 8 May 2023
        
      Edited: Luca Ferro
      
 on 8 May 2023
  
      a=[1 3 5 -3];
aPerms=nchoosek(a,2); %generates all unique couples
absDiff=abs(aPerms(:,1)-aPerms(:,2))' %absolute difference of said couples, ' to transpose
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

