Find rows in matrix based on columns value
27 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
If i have a matrix:
mat = [1 2 3 4;
5 6 7 8;
9 10 11 12];
How do i find the row index where the column has value 10 and 11 for example? In this case, the row index will be 3 since it has columns with 10 and 11.
I tried doing something like:
find(mat(:,2) == 10 && mat(:,3) == 11)
But it doesn't work.
Risposta accettata
Robert U
il 2 Set 2019
Modificato: Robert U
il 2 Set 2019
Hi Steward Tan,
in the given matrix there is no single column that contains the values 10 AND 11. If you want to find the rows that contain 10 AND 11 you could use:
tmp = arrayfun(@(dIn) find(any(mat(dIn,:) == 10) & any(mat(dIn,:) == 11)),1:size(mat,1),'UniformOutput',false);
tmp(cellfun(@isempty,tmp)) = {0};
row = find(cell2mat(tmp));
If you want to find the values 10 OR 11 within the matrix, and return the rows they have been found in, one way might be:
mat = [1 2 3 4;
5 6 7 8;
9 10 11 12];
[row,~] = find(mat == 10 | mat == 11);
row = unique(row);
Kind regards,
Robert
2 Commenti
madhan ravi
il 2 Set 2019
? There are only three rows whereas this answer gives 6 & 9 ?
>> mat = [1 2 3 4;
5 6 7 8;
9 10 11 12];
[row,~] = unique(find(mat == 10 | mat == 11))
row =
6
9
>>
Più risposte (2)
madhan ravi
il 2 Set 2019
Modificato: madhan ravi
il 2 Set 2019
ix = sum(ismember(mat,[10,11]),2)==2;
row_index = find(ix)
edit:
row_index = find(sum(~mod(mod(mat,10),11),2)==1)
3 Commenti
madhan ravi
il 2 Set 2019
Modificato: madhan ravi
il 2 Set 2019
Yes Andrei, I realised just before your comment :). Hi Andrei, how about:
m=any(~mod(mat,10),2) & any(~mod(mat,11),2);
w=find(m)
Andrei Bobrov
il 2 Set 2019
Modificato: Andrei Bobrov
il 2 Set 2019
My case for mat:
mat = [1 11 3 10
5 6 10 10
9 10 11 12];
mat2 = sort(mat,2);
[m,n] = size(mat);
mat3 = mat2([(1:end-m)',(m+1:end)']);
iii = mod((1:m*n-m)'-1,m)+1;
out = sort(iii(ismember(mat3,[10,11],'rows')));
or
[i1,~] = find(mat == 10);
[i2,~] = find(mat == 11);
out = intersect(i1,i2);
another variant:
out = all(any(mat == reshape([10,11],1,1,[]),2),3);
6 Commenti
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!