Calculate differences between all values in vector
41 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Swisslog
il 7 Apr 2014
Commentato: Mehri Mehrnia
il 19 Mag 2022
I'm trying to produce some code that will calculate the differences between nearly all values in a vector.
Specifically, say I have a vector [2 3 1 4]
Starting at 2 and moving through the vector, I need to calculate the difference between 2 and 3 (i.e. -1), 2 and 1, 2 and 4, then 3 and 1, 3 and 4, and then 1 and 4. I don't need to calculate the difference between, say, 3 and 2, and I'm only interested in the differences in one direction.
The vector I want to use the code on will be substantially bigger, and I'd like the output stored in a new, single column vector. I figured diff might provide a way forward, but can't see how to implement it specifying a 'lag'. Any help would be appreciated.
0 Commenti
Risposta accettata
David Sanchez
il 7 Apr 2014
my_vct = [2 3 1 4 5 6];
L = numel(my_vct);
tmp_vct = [my_vct(2:end) my_vct(end)];
x = my_vct - tmp_vct;
sol = zeros(L-1,L);
for k=2:L
tmp_vct = [my_vct(k:end) my_vct((L-k+2):end)];
sol(k-1,:) = my_vct - tmp_vct;
end
sol =
-1 2 -3 -1 -1 0
1 -1 -4 -2 0 0
-2 -2 -5 0 0 0
-3 -3 0 0 0 0
-4 0 0 0 0 0
3 Commenti
Più risposte (2)
Jos (10584)
il 7 Apr 2014
Modificato: Jos (10584)
il 7 Apr 2014
V = [2 3 1 4] ;
D1 = bsxfun(@minus,V(:), V(:).') % square form
% another option, only unique combinations, requires less memory
D2 = arrayfun(@(k) V(k:end)-V(k), 1:numel(k),'un',0)
D2 = [D2{:}]
3 Commenti
Soyy Tuffjefe
il 14 Ago 2021
Modificato: Soyy Tuffjefe
il 14 Ago 2021
I have a 5x1000 matrix (numerical entries),
M=[1 5 8 75 120;
1 25 18 5 10;
⋮ ⋮ ⋮ ⋮ ⋮
7 39 118 125 10]
and want to apply her or his code:
D2 = arrayfun(@(k) V(k:end)-V(k), 1:numel(k),'un',0)
D2 = [D2{:}
to every row of M, please, could anybody modify this code for this job.
Thanks in avanced!
Mehri Mehrnia
il 19 Mag 2022
A great idea.
any body knows computation cost of bsxfun(@minus,V(:), V(:).')???
I mean linear or 2nd order or...
I work with arrays in order of millions, that's why it's important for me.
Vedere anche
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!