Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中为矩阵的特定索引指定零_Matlab_Indices - Fatal编程技术网

在MATLAB中为矩阵的特定索引指定零

在MATLAB中为矩阵的特定索引指定零,matlab,indices,Matlab,Indices,例如: 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 i = 1:numel(a) if i ~= b a(i) = 0; end end 但是我要处理的矩阵实在太大了,而且要花很长时间才能跑完 有什么聪明的方法吗?谢谢。试试这个: a = [1 2

例如:

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 i = 1:numel(a)  
    if i ~= b  
      a(i) = 0;
    end       
end
但是我要处理的矩阵实在太大了,而且要花很长时间才能跑完

有什么聪明的方法吗?谢谢。

试试这个:

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;
另一种方法是基于复制:

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

我想这两种方法的效率可以归结为分配与setdiff的比较。此外,如果您的结果矩阵有许多零点,您可能应该考虑使用<代码>稀疏< /C>矩阵。< /P>使用<代码> NoMeL(A)< /C> >代替Load(a(:))< /C>。对于大型矩阵,后者可能非常慢。问题解决了!谢谢你们,安东和丹尼尔。我在做图像处理的东西。现在,该功能可以像魅力一样运行,谢谢:)