Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

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

1 visualización (últimos 30 días)
Elanakayon Annalingam
Elanakayon Annalingam el 10 de Nov. de 2019
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
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?

Respuestas (2)

Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato el 10 de Nov. de 2019
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 el 10 de Nov. de 2019
Editada: Stephan el 10 de Nov. de 2019
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

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by