2016-12-22 3 views
2

저는 36 개의 값을 가진 벡터를 가지고 있으며 두 개의 벡터를 무작위로 나누고 싶습니다. 첫 번째 벡터에는 25 개의 값이 있고 두 번째 벡터에는 11 개의 값이 있습니다.벡터를 MATLAB에서 무작위로 두 개의 벡터로 분할합니다.

는 I는 (MATLAB 사용) 코드를 작성했지만 I 원래 벡터의 값을 반복 한 경우, I가 발생

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, 위의 코드를 본다면! 나는 이미 첫 번째 벡터를 만들기 위해 그것을 사용하지만 원래 벡터의 나머지 값을 두 번째 벡터에 넣고 싶습니다. – Neamah

+0

코드를 삭제 한 이유가 무엇인가요? 해당 편집을 롤백하고 코드 예제를 그대로 두어 허용 된 답변과 비교하여 사용자가 수행 한 작업과 작동하지 않은 작업을 볼 수 있습니다. – gnovice

답변

3

대신에 명령의 결과로 두 번째 벡터의 11 개 개의 샘플을 얻을 수없는 것 randperm을 사용하는 25 개의 임의의 정수는 randperm(36) 구문을 사용하여 36 개의 임의의 정수를 생성합니다. 그런 다음이 무작위 정수 벡터의 처음 25 개 요소를 원본 벡터에 인덱싱하여 첫 번째 벡터를 얻은 다음 나머지를 두 번째 벡터에 사용할 수 있습니다. 아래 수정 코드.

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를 두 개의 벡터로 무작위로 나눠 넣기를 원합니다. 첫 번째 벡터에는 25 개의 값이 있고 두 번째 벡터에는 11 개의 값이 있습니다! 다시 당신의 대답을 주셔서 감사합니다 – Neamah

+1

@ 네마 그의 코드가하는 일입니다. 그것을 실행 해보십시오. 그것은 당신처럼 데이터를로드하고'randperm'을 사용하여'original_Vec' 배열의 값을 효과적으로 섞습니다. – TTT

+0

정말 고마워요, 네가 정말 친절 하네. – Neamah

관련 문제