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 つ下にシフトし、元の論理値と OR して、非ゼロの直後にゼロを取得します。
  3. これらの論理値を使用して配列にインデックスを付け、転置して操作を完了します
于 2012-09-14T09:18:17.760 に答える