【问题标题】:Faster way to write this loop in MATLAB?在 MATLAB 中编写此循环的更快方法?
【发布时间】:2020-03-29 22:11:46
【问题描述】:

有没有办法更快地做到这一点?我需要运行这个计算大约一百万次。此外,矩阵 B 的大小为 20x150x250。

给定一个大小为1xsize_w 的向量dummy_t、标量m、标量k,d 和一个大小与B 相同的矩阵A。对于w,使得dummy_t(w) 小于m,我计算这个数量。否则数量保持不变。

  for w=1:size_w
        if dummy_t(w) <= m
            B(dummy_t(w),w,k) = B(dummy_t(w),w,k) - d*A(dummy_t(w),w,k) ;
        end  
  end

【问题讨论】:

  • 不应该是if dummy_t(w) &lt;= m吗?
  • 什么是cprime?请阅读minimal reproducible example,然后阅读edit您的问题。
  • B(dummy_t,w,k) = B(dummy_t,w,k)-d*A(dummy_t,w,k).*(dummy_t&lt;=m)
  • @David 你可能是这个意思: B(dummy_t(w),w,k) = B(dummy_t,w,k)-d*A(dummy_t(w),w,k) .*(dummy_t(w)
  • 不,但我应该有: 而不是w

标签: performance matlab loops


【解决方案1】:

MATLAB 有一个数据类型logical array,表示一个布尔数组。所以我们可以首先使用dummy_t&lt;=m检查dummy_t中的所有元素。然后使用逻辑索引,得到逻辑数组中所有'True'的元素。

然后以此为指标进行计算。

dtleq3logi = dummy_t<=m; % this is a logical array
w = 1:size_w;
dtleq3 = dummy_t(dtleq3logi);
wdtleq3 = w(dtleq3logi);
B(dtleq3,wdtleq3,k) = B(dtleq3,wdtleq3,k) - d*A(dtleq3,wdtleq3,k);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2014-06-08
    相关资源
    最近更新 更多