2

時系列の値を持っているので、これらの値を機械学習アルゴリズムの入力値と出力値として使用する目的で、nx4 行列 [X y] に再形成したいと思います。

X(i) は 1x3 の入力ベクトルで、y は出力スカラー値です。

このアルゴリズムは、4 番目の値を予測するために、2 番目のシーケンス値 (3 つの値) ごとに入力として受け取ります。

実用的な例を挙げるために、シーケンスがあるとしましょう

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

[X y] 行列は次のようになります。

[1 3 5 7; 2 4 6 8; 9 11 13 15; 10 12 14 16]

2 行おきに取得するために、次のコードを記述しました。

vec1 = timeSeries(1:2:end);
XyVec1 = reshape(vec1,4,[])' 

同様に、偶数を取得するように書くこともできます:

vec2 = timeSeries(2:2:end);
XyVec2 = reshape(vec2,5,[])'

方法がわからないのは、行列 vec1 と vec2 行をインターリーブして取得することです

[vec(1,:); vec2(1,:);vec1(2,:), vec2(2,:)...]

2 つ (またはそれ以上) の行列の行をインターリーブする方法を知っている人はいますか?

4

4 に答える 4

5

試す

result = zeros(size(vec1,1)+size(vec2,1),size(vec1,2));
result(1:2:end,:) = vec1;
result(2:2:end,:) = vec2;

要素を正しい行に挿入するための matlab インデックス機能を再利用する

オクターブのモックアップのサンプル: http://ideone.com/RVgmYA

于 2013-07-20T20:49:19.747 に答える
4

このワンライナーオプションがあります

result = kron(vec1, [1;0]) + kron(vec2, [0;1]);

ただし、@Joel Falcou の方が高速です。入力ベクトルを

vec1 = rand(1000,1000);
vec2 = -rand(1000,1000);

それは与えます

Elapsed time is 0.007620 seconds. (indexing)
Elapsed time is 0.054607 seconds. (kron)
于 2013-07-20T21:31:44.797 に答える
2

頑張ってください:)それらで何が起こっているのかを理解していreshape(), permutes()ます:

a = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];
reshape(permute(reshape(a,2,4,[]),[2,1,3]),4,[])'

結果

ans =
     1     3     5     7
     2     4     6     8
     9    11    13    15
    10    12    14    16
于 2013-07-20T22:07:25.913 に答える