在MATLAB中写这个循环的更快方法



有没有更快的方法?我需要运行这个计算大约一百万次。此外,矩阵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

MATLAB有一个数据类型logical array,意思是布尔数组。因此,我们可以首先使用dummy_t<=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);

相关内容

  • 没有找到相关文章

最新更新