我正在尝试根据条件从矩阵中删除行。我有一个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多分钟,所以我什至不确定代码是否正确。有更有效的方法吗?
此外,我必须对单元格矩阵(分类数据)执行相同的操作。我应该期望与数值矩阵有很大的不同吗?
答案 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,:)= []
据我所知,您也可以在单元格数组中使用它。