Loop For extract maximum rows of matrix based on vectors

1 vue (au cours des 30 derniers jours)
abdullah al-dulaimi
abdullah al-dulaimi le 7 Déc 2022
I have this data , Consist of 3 vectors, i want to create a Loop for 1:5: size(data) , to extract rows that have maximum value for vector 2 (colomn number 2)
1 3 4
1 5 4
1 6 4
1 2 4
1 1 4
2 4 4
2 4 4
2 4 4
2 4 4
2 5 4
1 1 4
1 1 4
1 2 4
1 3 4
1 5 4
2 5 4
2 5 4
2 5 4
2 5 4
2 6 4
The result will be
1 6 4
2 5 4
1 5 4
2 6 4
  1 commentaire
Walter Roberson
Walter Roberson le 7 Déc 2022
Is the rule that you want to find the maximum for each group of lines that has the same value in the first column? Even if the third column is different? Or should it be groups of lines that have the same first and third column ?

Connectez-vous pour commenter.

Réponse acceptée

Voss
Voss le 7 Déc 2022
data = [
1 3 4
1 5 4
1 6 4
1 2 4
1 1 4
2 4 4
2 4 4
2 4 4
2 4 4
2 5 4
1 1 4
1 1 4
1 2 4
1 3 4
1 5 4
2 5 4
2 5 4
2 5 4
2 5 4
2 6 4
];
[n_rows,n_cols] = size(data);
assert(mod(n_rows,5) == 0)
result = zeros(n_rows/5,n_cols);
for ii = 1:5:n_rows-4
temp_data = data(ii+(0:4),:);
[~,idx] = max(temp_data(:,2));
result((ii-1)/5+1,:) = temp_data(idx,:);
end
disp(result);
1 6 4 2 5 4 1 5 4 2 6 4

Plus de réponses (1)

Fangjun Jiang
Fangjun Jiang le 7 Déc 2022
a=[1 3 4
1 5 4
1 6 4
1 2 4
1 1 4
2 4 4
2 4 4
2 4 4
2 4 4
2 5 4
1 1 4
1 1 4
1 2 4
1 3 4
1 5 4
2 5 4
2 5 4
2 5 4
2 5 4
2 6 4];
b=reshape(a',3,5,[])
b =
b(:,:,1) = 1 1 1 1 1 3 5 6 2 1 4 4 4 4 4 b(:,:,2) = 2 2 2 2 2 4 4 4 4 5 4 4 4 4 4 b(:,:,3) = 1 1 1 1 1 1 1 2 3 5 4 4 4 4 4 b(:,:,4) = 2 2 2 2 2 5 5 5 5 6 4 4 4 4 4
c=transpose(squeeze(max(b,[],2)))
c = 4×3
1 6 4 2 5 4 1 5 4 2 6 4

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by