MATLAB - 删除矩阵每行中的前导零,一次 1 个?

标签 matlab matrix sparse-matrix leading-zero

我想去掉矩阵每一行中的前导零,但限制为一次消除一个零。

这是我当前的解决方案,但是有更简单的方法吗?

a = [ 0 0 0 0 0 0 0 0 0 0
      0 0 5 2 3 4 0 0 0 0
      0 0 0 1 2 3 4 0 0 0
      0 0 1 2 3 0 0 0 0 0
      0 0 0 0 1 0 0 0 0 0
      1 0 0 0 0 0 0 0 0 0 ]

  b=zeros(size(a));
  for j=1:size(a,2)
  for i=1:size(a,1)
      temp=find(a(i,:),1,'first');
      candelete=min(2,temp);
      b(i,1:end-candelete+1)=a(i,candelete:end);
  end
  a=b
  end

编辑: 我想打印每次迭代,以便第一个输出只会删除第一个前导零:

 0     0     0     0     0     0     0     0     0     0
 0     5     2     3     4     0     0     0     0     0
 0     0     1     2     3     4     0     0     0     0
 0     1     2     3     0     0     0     0     0     0
 0     0     0     1     0     0     0     0     0     0
 1     0     0     0     0     0     0     0     0     0

第二个将删除 2 个零,依此类推...

最佳答案

编辑:现在问题已得到澄清,这里有一个更好的答案,使用 circshift :

index = (a(:, 1) == 0) & any(a, 2);
while any(index)
  a(index, :) = circshift(a(index, :), -1, 2);
  disp(a);
  index = (a(:, 1) == 0) & index;
end

关于MATLAB - 删除矩阵每行中的前导零,一次 1 个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027921/

相关文章:

python - 混合 numpy 矩阵和数组的危险

python - 计算大矩阵特征值的最快方法

arrays - For 循环对各个时间点进行平均 Matlab

python - 通过适用于 Python 的 MATLAB API 时方矩阵展平为行向量

performance - matlab中单个循环的向量化(乘法然后加法)

c++ - matlab 代码生成中支持的函数

r - 在数据框中每行选择一个单元格

r - 根据向量给出的 ID 从矩阵中提取多行

python - scipy 中稀疏矩阵的 Log-sum-exp 技巧

c++ - Armadillo:高效的 RAM 稀疏批量插入