3

私は次のようなベクトルを持っています:

a = [1,2,3,4,5,6...,n]

そして私はこのような新しいベクトルを取得したいと思います:

a_new = [1,0,0,2,0,0,3,0,0,4,0,0,5,0,0,6,...,0,0,n]

ここで、固定数のゼロ(上記の例では2)が非ゼロ要素の間に挿入されます。を選択するzero_p=3と、新しいベクトルは次のようになります。

a_new = [1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,...,0,0,0,n]

これどうやってするの?

4

3 に答える 3

5

これを試して:

zero_p=3;
a_new=zeros(1, (zero_p+1)*length(a)-zero_p);
a_new(1:(zero_p+1):end)=a;

(テストされていませんが、うまくいけば動作するはずです。)

于 2012-08-02T11:58:54.283 に答える
5

私が考えることができるいくつかの方法があります:

クロネッカー積

クロネッカー積は、これに非常に適しています。Matlabでは、kronあなたが探しているものです:

a = 1:4;
a = kron(a, [1 0 0])

ans = 

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

または、一般化すると、

a = 1:4;
zero_p = 3;
b = [1 zeros(1,zero_p-1)];
a = kron(a, b)

ans = 

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

ゼロ以外の要素で終了させたい場合は、追加の手順を 1 つ実行する必要があります。

a = a(1:end-zero_p);

または、ワンライナーが好きな場合は、すべてを次のように実行できます。

a = 1:4;
zero_p = 3;
a = [kron(a(1:end-1), [1 zeros(1,zero_p-1)]), a(end)]

ans = 

   1     0     0     2     0     0     3     0     0     4

ゼロ パディング

おそらく最も簡単な方法と最高のパフォーマンス:

 a = 1:4;
 zero_p = 3;
 a = [a; zeros(zero_p, size(a, 2))];
 a = a(1:end-zero_p);

行列乗算

また、シンプルで読みやすく、パフォーマンスも優れていますが、この特定のシナリオ以外の多くの状況ではやり過ぎかもしれません。

a = 1:4;
b = [1; zeros(zero_p, 1)];
a = b*a;
a = a(1:end-zero_p);
于 2012-08-02T13:02:08.510 に答える
0

x = [1 2 3 4 5]; アップサンプル(x,3)

o/p: 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0

乾杯!!

于 2014-05-01T23:45:01.767 に答える