2 중 교차 유효성 검사를하고 싶은 입력 2D 히스토그램이 있습니다. 문제는 히스토그램에서 상호 배타적 인 두 개의 무작위 샘플 데이터를 추출하는 방법을 모르겠다는 것입니다. 각 데이터 요소의 위치 정보 목록이 두 개인 경우 쉽게 동일하게 목록의 데이터를 섞어 목록을 균등하게 분할 할 수 있습니다.무작위로 히스토그램 데이터를 선택하십시오. MATLAB
list1 = [1,2,3,3,5,6,1];
list2 = [1,3,6,6,5,2,1];
idx = randperm(length(list1)); % ie. idx = [4 3 1 5 6 2 7]
shlist1 = list1(idx); % shlist1 = [3,3,1,5,6,2,1]
shlist2 = list2(idx); % shlist2 = [6,6,1,5,2,3,1]
slist1 = shlist1(1:3); % slist1 = [3,3,1]
elist1 = shlist1(4:6); % elist1 = [5,6,2,1]
slist2 = shlist2(1:3); % slist2 = [6,6,1]
elist2 = shlist2(4:6); % elist2 = [5,2,3,1]
을하지만이 같은 데이터를 막대 그래프로 나에게 제시 한 경우
hist = [2 0 0 0 0 0]
[0 0 0 0 0 1]
[0 1 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 1 0]
[0 0 2 0 0 0]
나는 결과가이
과 같이 할 것을 권장합니다그래서 목록은 내가 이런 짓을 했을까
hist1 = [0 0 0 0 0 0]
[0 0 0 0 0 1]
[0 1 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 1 0 0 0]
hist2 = [2 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 1 0]
[0 0 1 0 0 0]
데이터의 다른 절반이 무작위로 두 개의 새로운 히스토그램에 똑같이 할당됩니다.
각 bin hist (i, j)의 임의의 정수 높이를 취하여이를 hist1 (i, j)의 등가 bin에 추가하고 hist2 (i, j)와의 차이를 더하는 것과 동일합니까?
% hist as shown above
hist1 = zeros(6);
hist2 = zeros(6);
for i = 1:length(hist(:,1))*length(hist(1,:))
randNum = rand;
hist1(i) = round(hist(i)*randNum);
hist2(i) = hist(i) - hist1(i);
end
해당하는 경우 더 좋은 방법/내장 방법이 있습니까?
내 실제 히스토그램은 300x300 크기이며 약 6,000,000 개의 데이터 요소가 포함되어 있으며 빠른 속도가 필요합니다. 어떤 도움 :)에 대한
감사
편집 : 그것의 전체 확률 밀도 함수를 유지하지 않는 는 내가 만든 코드의 제안 비트, 목록에서 위치 점의 무작위 표본을 복용에 해당하지 않습니다 자료. 히스토그램을 반으로 줄이면 6 백만 포인트가 좋지만 몇 가지 방법으로는 여전히 작동 할 수있는 방법을 기대하고 있습니다.
고마워요. 제가 제안한 방법과 똑같은 일을합니다. 우아하고 효율적 일뿐입니다. 원래 제안한 방법의 문제점은 히스토그램이 확률 밀도 함수를 나타 내기 때문에 목록에서 위치 정보의 무작위 샘플을 가져온 것처럼 일반적인 모양을 보존해야합니다. 위의 방법에서는 대다수를 얻으 려 할 때 PDF가 많은 빈의 데이터를 거의 갖지 않을 가능성이 있습니다. – user1153070
데이터 세트가 무한대 인 경우이 메소드는 각 막대 그래프를 반으로 분할하고 각 반을 두 개의 다른 막대 그래프에 저장해야합니다. 히스토그램을 반으로 줄이는 것만으로는 정확하지 않을 수도 있습니다. – user1153070
@ user1153070 당신이 원하는 것을 지정해야한다고 생각합니다. 분할 방법 (반감)이 승인 된 종이/책을 기반으로한다면 당신이 옳고 원하는 것을하십시오. 그러나 당신의 질문에 당신이 배열을 임의로 랜덤하게 분할하는 효율적인 방법을 원한다고 대답했습니다. – rahnema1