根据条件删除行(Matlab)

时间:2018-06-24 08:51:28

标签: matlab

我正在尝试根据条件从矩阵中删除行。我有一个371000x5双重矩阵和一个371000x1的虚拟人偶(1和0)。我想从原始矩阵中删除每一行,其中假人向量的值为1。 我已经尝试了以下方法,但是花费了很长时间:

for i = 1:size(matrix_num,1)
if missing_matrix(i,1) >=0
    matrix_num(i,:) = [];
end
end

我的Matlab现在已经忙了30多分钟,所以我什至不确定代码是否正确。有更有效的方法吗?

此外,我必须对单元格矩阵(分类数据)执行相同的操作。我应该期望与数值矩阵有很大的不同吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的编程方式是:

new_matrix = old_matrix(missing_vector==1,:)

用于 保持 行,其中缺少vector_vector 1

new_matrix = old_matrix(missing_vector==0,:)

对于 删除 行,其中缺少vector_vector 1

对于教育价值观,如果您希望循环起作用,请不要逐行执行该操作。您的解决方案使矩阵被复制并在删除的每一行上重新分配。

因此,如果事先计算得出的矩阵大小,将会更好:

new_matrix = zeros(sum(missing_vector), 5)

然后您的迭代将起作用:

index_new=1
for index_old = 1:size(old_matrix,1)
      if missing_vector(index_old) ==0
            new_matrix(index_new,:) = old_matrix(index_old,:);
      end
end

答案 1 :(得分:0)

尝试紧凑的MATLAB代码

matrix_num(missing_matrix> = 0,:)= []

  • 注意:必须为 missing_matrix 变量创建向量。如果此变量是矩阵,则需要其他形式的代码。

据我所知,您也可以在单元格数组中使用它。