找出一个索引与剩余索引之间的差异

Upp*_*ide 1 performance matlab loops vectorization

我有一个矢量:

A = [1 2 3 4 5];
Run Code Online (Sandbox Code Playgroud)

我想找到A(1)和其余指数之间的区别:

A(1) = 1; 1 - A = [0 -1 -2 -3 -4]
Run Code Online (Sandbox Code Playgroud)

然后我想继续A(2),直到矢量结束.所以我在彼此的所有点之间存在差异.

目前我使用循环,但它非常耗时.如何使用矢量化技术来提高性能呢?

我正在使用MATLAB 2016a

bea*_*ker 7

如果您使用的是2016a或更早版本,则需要使用bsxfun:

>> A = [1 2 3 4 5];
>> bsxfun(@minus, A.', A)
ans =

   0  -1  -2  -3  -4
   1   0  -1  -2  -3
   2   1   0  -1  -2
   3   2   1   0  -1
   4   3   2   1   0
Run Code Online (Sandbox Code Playgroud)

从2016b(或Octave)开始,您可以利用隐式扩展并取消bsxfun:

>> A.' - A
ans =

   0  -1  -2  -3  -4
   1   0  -1  -2  -3
   2   1   0  -1  -2
   3   2   1   0  -1
   4   3   2   1   0
Run Code Online (Sandbox Code Playgroud)