Separate numbers present within a cell on multiple rows

3 次查看(过去 30 天)
Hi. I retrieved the first N numbers (largest to smallest) from the second column of the 'CountArray' array.
Now I wanted to determine the corresponding value on the first column of the 'CountArray' array by creating a column vector with these values.
I tried this way but, for example on row 22 and row 23 of cell 'matrix', there are two (equal) values because in 'values_rec' there is the same number (24).
CountArray = importdata("CountArray.mat");
N = 30;
values_rec = maxk(CountArray(:,2),N);
matrix = {};
for K = 1:height(values_rec)
[row,col] = find(CountArray(:,2) == values_rec(K));
value = CountArray(row);
matrix = [matrix;{value}];
end
matrix = cell2mat(matrix);
So I have to transform 'matrix' in this way:

采纳的回答

Voss
Voss 2023-8-2
编辑:Voss 2023-8-2
Take advantage of the second output of maxk, which is a vector of indices of the maxk values.
CountArray = importdata("CountArray.mat");
N = 30;
[values_rec,idx] = maxk(CountArray(:,2),N);
matrix = CountArray(idx,1);
disp(matrix)
71 70 69 72 68 73 74 67 75 76 77 66 78 79 80 81 65 82 83 64 84 85 90 94 86 93 89 95 134 87

更多回答(1 个)

dpb
dpb 2023-8-2
whos -file CountArray.mat
Name Size Bytes Class Attributes CountArray 86x2 1376 double
load CountArray.mat
N = 30;
[values_rec,ix] = maxk(CountArray(:,2),N);
matrix=CountArray(ix,1);
matrix(19:30)
ans = 12×1
83 64 84 85 90 94 86 93 89 95
See maxk doc; return the optional output of the location as well and you've already got the answer.

类别

Help CenterFile Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by