Computing the difference vector for all possible pairs of columns in a matrix?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Michael
el 26 de Abr. de 2016
Respondida: Jos (10584)
el 26 de Abr. de 2016
I am trying to take a matrix like
A=[1 2 3 4; 5 6 7 8; 9 10 11 12]
and find a new matrix B such that
B = [A(:,1)-A(:,2), A(:,1)-A(:,3), A(:,1)-A(:,4), A(:,2)-A(:,3), A(:,2)-A(:,4), A(:,3)-A(:,4)]
(note that I'm ignoring the symmetric terms like A(:,2)-A(:,1) since that is just -(A(:,1)-A(:,2)) )
Is there any way to efficiently vectorize this process? My current method of doing a loop as below is slow
M=length(A(:,1))
N=length(A(1,:))
cnt=1;
for i=1:N-1
for j=i+1:N
B(:,cnt) = A(:,i)-A(:,j);
cnt=cnt+1;
end
end
0 comentarios
Respuesta aceptada
Jos (10584)
el 26 de Abr. de 2016
Take a look at NCHOOSEK
A = [1 2 3 4 ; 10 8 6 4 ; 11 23 35 47]
ColIdx = nchoosek(1:size(A,2),2)
B = A(:,ColIdx(:,1)) - A(:,ColIdx(:,2))
An optimisation for nchoosek(V,2) can be found in NCHOOSE2, which you can download here: http://www.mathworks.com/matlabcentral/fileexchange/20144
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!