Avoid for loop: Looping through rows of m-by-n logical array
Mostra commenti meno recenti
Postedit: Read the comments below the accepted answer!
Is it possible to view the rows of a logical array independently without using a for-loop?
x = randi(5, 1, 10) % create 1x10 vector containing random integers between 1 & 5
y = randi(5, 1, 10)
xVals = unique(x)' % get column-vector of unique values of x
tf = x == xVals % logical array, that shows for every unique x-value, at which indices it occurs in x.
for i = 1:size(tf,1) % loop through rows of logical array
yVals(i) = {y(tf(i,:))}; % Assign all y-values that belong to one xVal-entry to one cell.
end
Risposta accettata
Più risposte (2)
Another way,
yVals = splitapply( @(g){g(:).'}, y, findgroups(x))
Bruno Luong
il 21 Apr 2018
Modificato: Bruno Luong
il 21 Apr 2018
For older MATLAB version, this FEX might be useful SplitVec
c = SplitVec(sortrows([x;y]'),1,2)
When stable ordering of y is desired
c = SplitVec(sortrows([x;y]',1),1,2)
Categorie
Scopri di più su Matrices and Arrays in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!