Info
此问题已关闭。 请重新打开它进行编辑或回答。
Create a matrix that stores rows that are not from a random sample
1 次查看(过去 30 天)
显示 更早的评论
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?
1 个评论
回答(2 个)
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
0 个评论
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
0 个评论
此问题已关闭。
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!