Jas*_*pel 8 arrays matlab matrix
我有一个Nx1值的向量.我想要做的是创建一个NxN矩阵,其中每个值代表第i个和第j个值之间的差异 - 有点像一个大的相关矩阵.我已经完成了循环,但我正在寻找一种更优雅的方法来使用MATLAB的矢量化功能,因为这个矢量可能会变得非常大.
Aco*_*rbe 12
关于什么
diff__ = bsxfun(@minus,repmat(A,N,1),A');
Run Code Online (Sandbox Code Playgroud)
通过这样做可以明显改善
diff__ = bsxfun(@minus,A,A');
Run Code Online (Sandbox Code Playgroud)
?
一点性能检查:
N = 1000;
v = rand(N,1);
tic
diff__ = bsxfun(@minus,repmat(v,N,1),v');
toc
tic
diff__ = bsxfun(@minus,v,v');
toc
Run Code Online (Sandbox Code Playgroud)
结果
Elapsed time is 105.343344 seconds.
Elapsed time is 1.124946 seconds.
Run Code Online (Sandbox Code Playgroud)
(蒂姆的数据检查:
diff _ =
0 2 6 4
-2 0 4 2
-6 -4 0 -2
-4 -2 2 0
Run Code Online (Sandbox Code Playgroud)
).
meshgrid可以生成适合此目的的矩阵.获取差异矩阵
meshgrid(v) - meshgrid(v)'
Run Code Online (Sandbox Code Playgroud)
例:
>> v = [1 3 7 5]
v =
1 3 7 5
>> meshgrid(v)
ans =
1 3 7 5
1 3 7 5
1 3 7 5
1 3 7 5
>> meshgrid(v) - meshgrid(v)'
ans =
0 2 6 4
-2 0 4 2
-6 -4 0 -2
-4 -2 2 0
>>
Run Code Online (Sandbox Code Playgroud)