例如:
a = [1 2 3; 4 5 6; 7 8 9];
b = [2 4]; %//Indices I got
如何为a
中未编入索引的b
的每个元素设置为零,以获取:
0 2 0
4 0 0
0 0 0
我尝试了for
循环:
for i = 1:numel(a)
if i ~= b
a(i) = 0;
end
end
但我应对的矩阵非常大,完成运行需要很长的时间。
有没有聪明的方法呢?谢谢。
答案 0 :(得分:4)
试试这个:
a = [1 2 3; 4 5 6; 7 8 9];
b = [2 4];
a(setdiff(1:length(a(:)),b)) = 0;
<强>更新强>
正如@Daniel所提出的,对于大型矩阵来说,最好使用
a(setdiff(1:numel(a),b)) = 0;
答案 1 :(得分:4)
Anton's direct solution的替代方案是基于复制的方法:
a = [1 2 3; 4 5 6; 7 8 9];
b = [2 4];
atmp = a(b);
a = zeros(size(a));
a(b) = atmp; %// copy needed elements
我猜这两种方法的效率归结为分配vs setdiff
。此外,如果结果矩阵有很多零,则应考虑使用sparse
矩阵。