MATLAB:删除矩阵的一些元素

时间:2014-02-17 10:15:56

标签: arrays matlab matrix

我有一个看起来像的矩阵:

A =[
    1  5
    2 10
    3 12
    4 25
    5  8]

假设我想删除包含大于10的元素的行。我一直在尝试使用for循环,只需读取矩阵并使用

for ii = 1:5
   for jj = 2 
      if A(ii,jj) > 10
         A(ii,2) = [];
      end
   end
end

问题在于,我一直收到有关矩阵大小的错误。删除一行时,矩阵的大小会减小,我知道我必须设置size(A)=size(A)-1但它不起作用。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

使用下标表示法时,您无法移除单个元素,因此您的错误就在此处:

A(i,2) = [];

您有两个选择,要么删除整行:

A(i,:) = [];

或者将你的矩阵线性化并删除单个元素(但是你不能恢复你原来的形状:

for ii = numel(A):-1:1
    if A(ii) > 10
        A(ii) = [];
    end
end

但是使用循环是不必要的,可能效率低下。您可以使用逻辑索引来执行此操作:

A(any(A'>10),:) = [];

删除整行或者只删除单个元素尝试:

A(A>10) = []

但是你会看到你最终得到一个行向量(线性化)结果

答案 1 :(得分:0)

这是一个解决方案,非常类似于@Dan的解决方案。基本上这可以保留你想要的东西,而不是删除你不想要的东西:

A(all(A<=10,2),:)