计算向量中所有值之间的差值

82次(过去30天)
Swisslog
Swisslog 2014年4月7日
编辑: Soyy Tuffjefe2021年8月14日
我试图生成一些代码来计算向量中几乎所有值之间的差值。
具体来说,假设我有一个向量[2,3 1 4]
从2开始,沿着向量移动,我需要计算2和3之间的差(即-1),2和1,2和4,然后3和1,3和4,然后1和4。我不需要计算3和2之间的差,我只对一个方向的差感兴趣。
我想要在上面使用代码的向量要大得多,我希望输出存储在一个新的单列向量中。我认为diff可能提供了一种前进的方法,但由于“滞后”,我不知道如何实现它。任何帮助都将不胜感激。

接受的答案

大卫·桑切斯
大卫·桑切斯 2014年4月7日
My_vct = [2 3 1 4 5 6];
L =元素个数(my_vct);
Tmp_vct = [my_vct(2:end) my_vct(end)];
X = my_vct - tmp_vct;
索尔= 0 (L - 1, L);
k = 2: L
tmp_vct = [my_vct(k:end) my_vct((L-k+2):end)];
Sol (k-1,:) = my_vct - tmp_vct;
结束
索尔=
-1 2 -3 1 -1 0
1 -1 -4 -2 0 0
-2 -2 -5 0 0
3 -3 0 0 0
-4 0 0 0 0 0
3评论
乔斯(10584)
乔斯(10584) 2014年4月7日
对于大量的输入,这将是非常缓慢的。

登录评论。

更多的答案(2)

米金
米金 2014年4月7日
瑞士法郎,你可以用
Pdist ([2 3 1 4]',@(x,y) x-y)
1评论
Swisslog
Swisslog 2014年4月7日
听起来理想!但恐怕我没有统计工具箱

登录评论。


乔斯(10584)
乔斯(10584) 2014年4月7日
编辑:乔斯(10584) 2014年4月7日
V = [2 3 1 4];
D1 = bsxfun(@minus,V(:), V(:).'))%广场形式
%另一个选项,只有唯一的组合,需要更少的内存
arrayfun(@ k) V(k:end)-V(k), 1:numel(k),“联合国”, 0)
D2 = D2 ({}):
2的评论
Soyy Tuffjefe
Soyy Tuffjefe 2021年8月14日
多亏了 乔斯(10584) 为您的代码…
我有一个5x1000的矩阵(数值项),
M=[1 5 8 75 120;
1 25 18 5 10;
⋮⋮⋮⋮⋮
7 39 118 125 10]
想要应用她或他的代码:
arrayfun(@ k) V(k:end)-V(k), 1:numel(k), “联合国” , 0)
D2 = [D2 {:}
到M的每一行,谁能修改这个代码。
由于在皇冠!

登录评论。

s manbetx 845

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

翻译的