【问题标题】:How to vectorize for loop with custom index如何使用自定义索引矢量化 for 循环
【发布时间】:2012-10-02 21:49:02
【问题描述】:

我是 Matlab 的新手,所以我不确定这是否可行。我有一个简单的 for 循环:

for i=1:n
    B.x(indexB(i)) += A.x(i);
end

其中 A.x 和 B.x 是两个长度为 n 的向量,indexB 是一个长度为 n 的向量,其中包含从 A.x 中的元素到 B.x 的适当映射。

是否可以对这个循环进行矢量化?

【问题讨论】:

    标签: matlab vectorization


    【解决方案1】:

    我想是的,按照这个例子:

    a = [1 2 3 4 5];
    b = a;
    idx = [5 4 3 2 1];
    a(idx)  = a(idx) + b(1:5);
    

    应该给:

    a =
    
     6     6     6     6     6
    

    所以在你的情况下,如果indexB 的大小为n,你可以这样写:

    B.x(indexB) = B.x(indexB) + A.x(1:n);
    

    否则:

    B.x(indexB(1:n)) = B.x(indexB(1:n)) + A.x(1:n);
    

    【讨论】:

    • 如果 A 和 B 的长度不同,这仍然有效吗?
    • 是的,但是在左右索引之间必须存在一对一的映射关系,或者在这种情况下,用于 B.x 的索引向量 indexB 和索引向量 [1:n]用于 A.x.显然,索引所指的元素需要存在。
    猜你喜欢
    • 2017-07-22
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2015-05-17
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多