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