Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Create a matrix that stores rows that are not from a random sample

조회 수: 1 (최근 30일)
Elanakayon Annalingam
Elanakayon Annalingam 2019년 11월 10일
마감: MATLAB Answer Bot 2021년 8월 20일
I have a 1020x9 matrix and I took a random sample that is half the original size (510x9), I want to retrieve the other half. I think the best way to do this is to do matrix comparison of the orignal matrix and the random sample and store the rows they don't have in common into a new matrix. How can I accomplish this?

답변 (2개)

Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato 2019년 11월 10일
The function ismember may be what you need to efficiently solve your problem:
OriginalMatrix = randn(1020,9);
RandomMatrixIndex = randperm(1020);
IndexFirstMatrix = RandomMatrixIndex(1:end/2);
IndexSecondMatrix = RandomMatrixIndex(end/2+1:end);
FirstMatrix = OriginalMatrix(IndexFirstMatrix,:);
IndexFound = ismember(OriginalMatrix,FirstMatrix,'rows');
EqualIndex = find(IndexFound==1); % Index for your first matrix
FoundedIndexSecondMatrix = find(IndexFound==0); % Remaining index, those that you want
% Comparison to check that they are the same
Cmp1 = norm( sort(IndexFirstMatrix)-EqualIndex')
Cmp2 = norm( sort(IndexSecondMatrix)-FoundedIndexSecondMatrix')
Cmp1 =
0
Cmp2 =
0

Stephan
Stephan 2019년 11월 10일
편집: Stephan 2019년 11월 10일
A way smarter is using the ismember function - here is an example - all you need ist the last line, the first two lines are just to get some numbers to illustrate:
matrix = randi(10,6,3)
sample = matrix(1:2:end,:)
result = matrix(~ismember(matrix,sample,'rows'),:)
matrix =
2 9 6
7 4 5
5 7 10
8 2 7
8 1 7
10 8 9
sample =
2 9 6
5 7 10
8 1 7
result =
7 4 5
8 2 7
10 8 9

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by