我有一个看起来像的矩阵:
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
但它不起作用。任何帮助表示赞赏!
答案 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),:)