2012-11-17 3 views
1

다음은 데이터 세트에서 미리 지정된 개수의 무작위 순열을 선택하는 예제입니다. 어떻게 remaainder를 사용하여 새 데이터 세트를 만들 수 있습니까? 예를 들어 아래에서 49402 (약 10 %)를 선택하고 UnseenTestdata이라는 데이터 집합을 만듭니다. 나머지는 testdata이라는 새 데이터 집합으로 이동합니다.데이터 세트의 나머지 부분을 얻는 방법

pointsToPick = 49402; %# Numbers to pick 
rVec = randperm(494021); %# Random permutation of datapoint indices (N=494021 in this case) 

UnseenTestdata = fulldata(rVec(1:pointsToPick),:); %# Random sample 

Unseentestdata-fulldata = 적절하게 testdata라는 데이터 세트의 나머지.

fulldata 세트의 크기는 494021x6이며, 그 중 fulldata에서 임의로 선택하는 49402x6입니다. 나는 fulldata에서 unseentestdata를 뺀 것을 남겨 둘 필요가있다. 당신이 보이지 않는 화면 덤프에 통지하는 경우

enter image description here

: 그러나 이것이 내가 화면에 결과를 덤프 한 작동하지 않습니다

fulldata = [1 2; 3 4; 5 6; 7 8]; 
rVec = randperm(4); 
pointsToPick=2; 
unseen = fulldata(rVec(1:pointsToPick),:); 
testdata = fulldata(rVec(pointsToPick:length(rVec)),:); 

:

바나바 사볼은의 테스트 케이스 대답을 추가 data = 3,4 및 7,8 그러나 testdata에서 확인하면 7,8 남아 있습니다.

만약 fulldata =

1,2 
3,4 
5,6 
7,8 

그리고 우리는이 경우 임의의 두 행을 선택 보이지 않는의 행은 다음과 같습니다

다음
row 
3,4 
7,8 

은 어떤 남아 있어야한다 : 그러나

1,2 
5,6 

예제 테스트에서 나온 화면 덤프에 눈에 띄면 testdata 행이 있습니다 :

7,8 

예제 테스트가 작동하지 않는다는 것을 보여줍니다.

+0

여기에 '당신을 돈 setminus 의미? fulldata의 차원을 추가 할 수 있습니까? –

+0

또한 내 대답을 업데이트하고 테스트 케이스를 추가하여 확인했습니다. –

+0

제 답변을 다시 확인해 주셨으면합니다. 죄송합니다. 나는 그 괄호에 딱 들어 맞지 않았습니다. Plus는 나머지 요소의 수와 전체 데이터의 두 번째 차원이 동일하다는 명목상의 지식을 가지고 있기 때문에 테스트 케이스도 업데이트했습니다. –

답변

0

내가 제대로 질문을 이해한다면,이 솔루션은

testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:); 

간단한 테스트 케이스이다 :

fulldata = [1 2; 3 4; 5 6; 7 8;10 9]; 
rVec = randperm(4); // gives me first time [4 2 3 1 5] 
pointsToPick=2; 
unseen = fulldata(rVec(1:pointsToPick),:); // [7 8; 3 4] 
// length(rVec) is 5 
testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:); // [5 6; 1 2; 10 9] 

그 의미에서 fulldata = unseen (setplus) testdata를 명확하게 볼 수 있습니다. 배열은 C++에서 말하는 것과 달리 하나에서 위로 인덱스가 지정되므로 "+1"이 필요하므로 마지막 인덱스는 length이 아니고 length-1이 아닙니다.

일을 사용하여이 올바른지 당신은 확인할 수

isequal(sort([unseen; test]), sort(full_data)) // should be true 
+0

흠 뭔가가 생겨서 testdata의 출력은 444619 일 때 444620입니다. –

+0

예, 수정되었습니다. –

+0

하하 당신은 +1 할 수 없습니까? 데이터가 정확한 즉 unseentestdata에서 fulldata = 나머지가 필요합니다. unseentestdata에 대한 색인이 필요할 수 있습니다. 길이 등 아마도 내가 뭘 원하지 않습니다. –

관련 문제