例如,我有一个N乘矢量(N是5):
x=[1,2,3,4,5];
我想创建一个N-by-N矩阵M
,其中M(i,j)=x(i)-x(j)
和M(j,i) = -1 * M(i,j)
任何人都可以在没有循环的情况下提供简单的方法吗?
答案 0 :(得分:4)
您可以使用二进制单例扩展bsxfun
:
bsxfun(@minus,x.',x)
或(在2016b或更高版本中)隐式扩展:
x.'-x
两者都会导致:
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
此方法完全按照您的要求执行 - 将函数应用于 a 与 b 的所有组合。在您的情况下, a 和 b 只是x
本身,而且函数是负数(在{{1中用@
写的在隐式扩展中,或者作为简单的运算符bsxfun
。
由于您要从行-
中减去列j
,因此您应首先编写代表行的列i
(即x
) 索引,然后是行x.'
,代表列索引。