Building matrix of differences
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Say I have a vector v=[v1,...,vn].'. How can I generate the matrix D with components D(i,j) = vi - vj ? The dimension of the vector n is very large, so efficiency matters. Ideally I would like to generate the following matrix E(i,j) = 1/(vi-vj) for vi ~= vj (which we may assume corresponds to i~=j) and E(i,i) = 0.
Is there a fast way to do it? Doing it with loops is very slow.
Thanks a lot,
L
0 comentarios
Respuestas (1)
Star Strider
el 19 de Mayo de 2017
See if this does what you want:
v = randi(9, 1, 5); % Create Data
D = bsxfun(@minus, v, v'); % Subtract To Create Matrix
Dnz = D~=0; % Logical Matrix (Becomes Numeric)
Dinv = Dnz./D; % Element-Wise ‘Inverse’
Note that ‘0/0’ become NaN values.
2 comentarios
Star Strider
el 19 de Mayo de 2017
My pleasure!
To convert the NaN values to 0, add this assignment to my previous code:
Dinv(~Dnz) = 0; % Convert ‘NaN’ To ‘0’
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!