2

我有一个数组

x =

    404  1  1  5  5  1  1  5  0  0   0   0   0   0   0   0  0
    405  2  5  5  4  5  2  5  4  5   3   3   2   5   3   3  0
    406  5  5  3  5  3  5  4  3  3   1   4   0   0   0   0  0

我想删除所有的,除了直接在非零整数右侧的那些。即整行中除最后一个零之外的所有整数。(例如,x=x(x~0);只是删除零,然后返回一个列向量。所以这不太正确)然后连接所有剩余的向量。

像这样:

404  1  1  5  5  1  1  5  0 405  2  5  5  4  5  2  5  4  5   3   3   2   5   3   3  0 406  5  5  3  5  3  5  4  3  3   0   4

有任何想法吗?

4

1 回答 1

4

怎么样

x = x.';
dx = x ~= 0;
dx = dx | circshift(dx, 1)

y = x(dx).'

所以,分解:

  1. 找到转置数组的非零的逻辑索引
  2. 将此数组循环向下移动 1 并将其与原始逻辑进行或,以在非零之后直接进入零
  3. 用这些逻辑索引数组并转置以完成操作
于 2012-09-14T09:18:17.760 回答