我有一个问题。
我有两个矩阵nbd_new和nbd_old,它存储2D矩阵的线性索引nos,如phi_new和phi_old。 phi_old和amp; phi_new大小相同。我需要做的是计算集合nbd_new中的所有位置,但不计算集合nbd_old中的位置。然后对于每个这样的位置,我必须以这种方式更新phi_new:如果该位置的phi_old大于0,则将phi_new放在该位置=宽度+ 1,否则将phi_new放在该位置= - (宽度+ 1)
我写了这样的代码:
C = setdiff(nbd_new,nbd_old);
for k=1:length(C)
if phi_old(C(k))>0
phi_new(C(k))=(width+1);
else
phi_new(C(k))=-(width+1);
end
end
此代码有效但由于循环和if-then-else语句而非常慢。这段代码可以进一步优化吗?
提前全部感谢!!
编辑:请检查phi_old和phi_new是否都是2-D矩阵,矩阵C是该矩阵的线性索引(位置)的集合。如果我事先不清楚,我很抱歉。错误地,我写了你而不是phi。两者都是一样的。
答案 0 :(得分:3)
不需要循环,请使用logical indexing:
phi_new = zeros(size(phi_old)); % preallocate memory
phi_new(C(phi_old(C)>0)) = (width+1);
phi_new(C(phi_old(C)<0)) = - (width+1);