Matrix 排序数据,清除行

Matrix 排序数据,清除行,matrix,Matrix,嗨,我正在尝试通过从当前矩阵数据创建一个新矩阵来对数据进行排序,当满足条件时,该矩阵将省去行。例如,如果我只想保持列17的值小于2的行,那么我写: B=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; count=0 for n = 1:19709 if abs(G(n,17)) < 2 B(n,:)=G(n,:) end count=count+1 if count>19709 b

嗨,我正在尝试通过从当前矩阵数据创建一个新矩阵来对数据进行排序,当满足条件时,该矩阵将省去行。例如,如果我只想保持列17的值小于2的行,那么我写:

B=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
count=0
for n = 1:19709
    if abs(G(n,17)) < 2
        B(n,:)=G(n,:)
    end
    count=count+1

    if count>19709
        break
    end

end
B=[01100000];
计数=0
对于n=1:19709
如果abs(G(n,17))<2
B(n,:)=G(n,:)
结束
计数=计数+1
如果计数>19709
打破
结束
结束

但是,当不满足条件时,这段代码反而返回一行零,而不是只保留该行,但我不确定代码有什么问题。谢谢大家!

这里的问题是B(n,:)=G(n,:)。你必须知道你跳过了多少行。应该是B(n-k,:)=G(n,:)@Colin,这就是
count
的作用@它可能应该是
B(count,:)=G(n,:)
,并且
count
应该初始化为
1
(或者可能是
2
,如果你不想覆盖
B
)中的初始值。哦,好的,这是可行的,但是你能解释一下原因吗,因为在我看来,for循环本身就是一个通过n=1:n个数字的计数器。是因为当我们跳过行时,MatLab会自动用零填充这些行吗?是的。试试这个:
清除w;w(7,4)=12;disp(w)
MATLAB自动使用
0
@SmcWill填充未指定和以前未分配的元素,如果是这样,则在if语句中应该有count。