2016-12-22 5 views
2

私は36の値を持つベクトルを持っており、2つのベクトルにランダムに分割したいと思います。 (最初のベクトルには25の値があり、2番目のベクトルには11の値があります)。ベクトルをMATLABで無作為に2つのベクトルに分割する

Iは、(MATLABを使用して)、このコードを書かれているが、私は元のベクトルの値を繰り返しているときに、私は第二のベクターにおける11個のサンプルは、このコマンドの結果として

Second_vec = setdiff(orignal_Vec,First_vec); 



clear; 
load('U1_Acc_TimeD_FDay.mat'); 

orignal_Vec=(Acc_TD_Feat_Vec (:,1)); 

Total_Samples = size(orignal_Vec,1); 

Selected_Samples = 25; 

assert(Selected_Samples<=Total_Samples); 

rand_rows = randperm(Total_Samples, Selected_Samples); 

First_vec = orignal_Vec(rand_rows,:); % Select the random rows from the original Vector 

Second_vec = setdiff(orignal_Vec,First_vec); 
+0

データにインデックスとインデックスを生成するには、['randperm'](https://www.mathworks.com/help/matlab/ref/randperm.html)を使用してください。 – excaza

+0

上記のコードが表示された場合は、Excazaまでお寄せください。私はすでに最初のベクトルを作成するためにそれを使用しますが、私は元のベクトルの残りの値を2番目のベクトルにします。 – Neamah

+0

コードを削除したのはなぜですか?その編集をロールバックしてコード例を残すことで、受け入れられた回答との比較のために、人々があなたのしたことやあなたのためにうまくいかなかったことを見ることができます。 – gnovice

答えて

3

代わりの発生を取得しませんrandpermを使用して25個の乱数を生成し、randperm(36)の構文を使用して36個の乱数を生成します。次に、このランダムな整数ベクトルの最初の25個の要素を元のベクトルにインデックス付けして、最初のベクトルを取得し、残りを2番目のベクトルに使用することができます。あなたの変更されたコード。

clear; 
load('U1_Acc_TimeD_FDay.mat'); 

orignal_Vec=(Acc_TD_Feat_Vec (:,1)); 

Total_Samples = size(orignal_Vec,1); 

Selected_Samples = 25; 

assert(Selected_Samples<=Total_Samples); 

rand_rows = randperm(Total_Samples); 

First_vec = orignal_Vec(rand_rows(1:Selected_Samples)); % Select the random rows from the original Vector 

Second_vec = orignal_Vec(rand_rows(Selected_Samples+1:end)); 
+0

親愛なるNavan、ありがとうございます。私はあなたが私の質問を誤解していると思います。私はすでにベクトル(orignal_Vecです)を持っています。だから、私はランダムな整数値を生成したくない!私の値がすでにorignal_Vecに保存されているからです。私がOrignial Vectorを2つのベクトルにランダムに分割するためにやりたいことはすべてです。最初のベクトルは25個の値を持ち、2番目のベクトルは11個の値を持っています! – Neamah

+1

@Neamahそれは彼のコードがやっていることです。それを実行してみてください。あなたのようにデータを読み込み、 'randperm'を使って' original_Vec'配列の値を効果的にシャッフルします。 – TTT

+0

ありがとう、ナバン、本当に親切です – Neamah

関連する問題