【问题标题】:How to vectorize this for-loop in Matlab?如何在 Matlab 中对这个 for 循环进行矢量化?
【发布时间】:2015-06-25 11:08:22
【问题描述】:

这也许是一个简单的问题。我有一个向量和一个矩阵,并想根据一些操作制作一个新矩阵。我使用 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)]

【问题讨论】:

    标签: matlab for-loop matrix vector vectorization


    【解决方案1】:

    您可以使用高效的bsxfun -

    Delta = bsxfun(@minus,d,d.') - t
    

    【讨论】:

    • 嘿,非常感谢@divakar,我不知道它是什么。但我测试过,效果很好:))
    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多