【问题标题】:make this matlab snippet run without a loop让这个 matlab 代码片段在没有循环的情况下运行
【发布时间】:2013-04-27 08:43:13
【问题描述】:

我希望下面的代码在时间上更有效。最好没有循环。

参数:

t % time values vector
t_index = c % one of the possible indices ranging from 1:length(t).
A % a MXN array where M = length(t)
B % a 1XN array

代码:

m = 1;
for k = t_index:length(t)
        A(k,1:(end-m+1)) = A(k,1:(end-m+1)) + B(m:end); 
        m = m + 1;
end 

非常感谢。

【问题讨论】:

    标签: matlab vectorization


    【解决方案1】:

    我从 B 构建了一个大小为 NxM 的矩阵(称为 B2),根据条件在正确的地方有一个零和一个三角形,然后你需要做的就是A+B2

    类似这样的:

    N=size(A,2);
    B2=zeros(size(A));
    k=c:length(t);
    B2(k(1):k(N),:)=hankel(B)
    ans=A+B2;
    

    请注意,“矢量化”这一事实并不意味着如今它更快。 Matlab 的 JIT 使 for 循环具有可比性,有时甚至比内置矢量化选项更快。

    【讨论】:

    • 我有一个类似的解决方案,但我删除了它,我无法完全正确 :) 更不用说我从 hankel 函数得到内存不足错误,大小为OP 正在使用
    • 我不确定这是否比 for 循环的性能更好。为什么hankel 会让你失忆?
    • 实际上 for 循环在我的计算机上做得更好......无论如何,非常感谢,我仍然从经验中学到了很多东西。
    猜你喜欢
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多