如何在 Matlab 中向量化这个 for 循环?
How to vectorize this for-loop in Matlab?
这也许是一个简单的问题。我有一个向量和一个矩阵,想根据一些操作创建一个新矩阵。我使用 for 循环构建了新矩阵,我想知道如何使用可能更快的 Vector 运算符编写它。
d=[n x 1];
t= [n x n];
我想要如下 [n x n] 的新 Delta 矩阵:
for i=1:39
for j=1:39
Delta(i,j)=d(i)-d(j)-t(i,j);
end
end
结果
[d (1) - d (1) - t( 1 ,1),d (1) - d (2) - t( 1 ,2), ... d(1) - d (39) - t( 1 ,39)
d (2) - d (1) - t( 2 ,1),d (2) - d (2) - t( 2 ,2), .... ,d (2) - d (39) - t( 2 ,39)
.
.
.
d (38) - d (1) - t( 38 ,1),d (38) - d (2) - t( 38 ,2), ... , d(38) -d (39)-t(38,39)
d (39) - d (1) - t( 39 ,1),d (39) - d (2) - t( 39 ,2), ..., d(39)- d (39)- t(39 ,39)]
你可以使用高效的bsxfun
-
Delta = bsxfun(@minus,d,d.') - t
这也许是一个简单的问题。我有一个向量和一个矩阵,想根据一些操作创建一个新矩阵。我使用 for 循环构建了新矩阵,我想知道如何使用可能更快的 Vector 运算符编写它。
d=[n x 1];
t= [n x n];
我想要如下 [n x n] 的新 Delta 矩阵:
for i=1:39
for j=1:39
Delta(i,j)=d(i)-d(j)-t(i,j);
end
end
结果
[d (1) - d (1) - t( 1 ,1),d (1) - d (2) - t( 1 ,2), ... d(1) - d (39) - t( 1 ,39)
d (2) - d (1) - t( 2 ,1),d (2) - d (2) - t( 2 ,2), .... ,d (2) - d (39) - t( 2 ,39)
.
.
.
d (38) - d (1) - t( 38 ,1),d (38) - d (2) - t( 38 ,2), ... , d(38) -d (39)-t(38,39)
d (39) - d (1) - t( 39 ,1),d (39) - d (2) - t( 39 ,2), ..., d(39)- d (39)- t(39 ,39)]
你可以使用高效的bsxfun
-
Delta = bsxfun(@minus,d,d.') - t