フィルターのクリア

Calculate differences between all values in vector

41 ビュー (過去 30 日間)
Swisslog
Swisslog 2014 年 4 月 7 日
コメント済み: Mehri Mehrnia 2022 年 5 月 19 日
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.

採用された回答

David Sanchez
David Sanchez 2014 年 4 月 7 日
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 件のコメント
Swisslog
Swisslog 2014 年 4 月 7 日
...and
sol=sol(:);
sol(sol==0) = [];
to reduce to a single column I guess. Many thanks!
Jos (10584)
Jos (10584) 2014 年 4 月 7 日
This will be very slow for large inputs.

サインインしてコメントする。

その他の回答 (2 件)

Jos (10584)
Jos (10584) 2014 年 4 月 7 日
編集済み: Jos (10584) 2014 年 4 月 7 日
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 件のコメント
Soyy Tuffjefe
Soyy Tuffjefe 2021 年 8 月 14 日
編集済み: Soyy Tuffjefe 2021 年 8 月 14 日
Thanks to Jos (10584) for your code...
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
Mehri Mehrnia 2022 年 5 月 19 日
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.

サインインしてコメントする。


Mischa Kim
Mischa Kim 2014 年 4 月 7 日
Swisslog, you could use
pdist([2 3 1 4]',@(x,y) x-y)
  1 件のコメント
Swisslog
Swisslog 2014 年 4 月 7 日
Sounds ideal! Afraid I don't have the statistics toolbox though

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by