topkrows
按排序顺序的前若干行
语法
说明
示例
对矩阵行排序
按照不同的排序顺序对矩阵的行进行排序,并查看前几行。
创建一个由 1 到 10 之间的随机整数组成的 20×5 矩阵。
rng default % for reproducibility X = randi(10,20,5);
按降序对 X
的行进行排序,并返回前 4 行。默认情况下,topkrows
使用矩阵的第一列进行排序。对于在特定列中具有相等元素的任何行,将按照右侧紧邻的列进行排序。
TA = topkrows(X,4)
TA = 4×5
10 10 8 7 6
10 7 8 2 4
10 4 4 3 5
10 3 7 9 6
通过三个输入参量调用时,topkrows
完全按照第三个参量中指定的列进行排序。这意味着指定列中具有相等值的行将保持原始顺序。使用第三列中的值按降序对 X
进行排序,并返回前 5 行。
TB = topkrows(X,5,3)
TB = 5×5
5 7 10 2 6
2 9 8 6 6
10 10 8 7 6
10 7 8 2 4
10 2 8 3 6
同时使用第三列和第四列对 X
进行排序。在这种情况下,topkrows
先按第 3 列对行进行排序。对于第 3 列中具有相等值的任何行,再按第 4 列进行排序。
TC = topkrows(X,5,[3 4])
TC = 5×5
5 7 10 2 6
10 10 8 7 6
2 9 8 6 6
10 2 8 3 6
10 7 8 2 4
指定矩阵列的排序方向
使用具有不同排序方向的多个列对矩阵进行排序。
创建一个由 1 到 10 之间的随机整数组成的 100×5 矩阵。
rng default % for reproducibility X = randi(10,100,5);
使用前三列对 X
进行排序,并返回前 10 行。使用元胞数组为每一列指定排序方向。
TA = topkrows(X,10,1:3,{'descend','ascend','ascend'})
TA = 10×5
10 1 4 6 7
10 1 8 5 1
10 2 3 4 7
10 3 5 10 5
10 4 7 2 4
10 5 5 2 7
10 5 5 6 7
10 6 5 5 7
10 6 6 1 5
10 7 7 8 1
对表行排序
对表中的异构数据行进行排序。
基于 patients.mat
数据集(包含一组患者的基本健康信息)创建一个表。在该表中包括患者的年龄、性别、身高和自我评估的健康状况。将 SelfAssessedHealthStatus
变量指定为有序分类数组。
load patients vals = {'Poor','Fair','Good','Excellent'}; SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus,vals,'Ordinal',true); T = table(Age,Gender,Height,SelfAssessedHealthStatus);
按降序对表进行排序,并获取前 10 行。结果按照第一个变量 Age
以降序排列。再按照其余的列继续排序:
如果年龄相同,则按
Gender
变量继续排序。如果性别相同,则按
Height
变量继续排序。如果身高相同,则按
SelfAssessedHealthStatus
变量继续排序。
TA = topkrows(T,10)
TA=10×4 table
Age Gender Height SelfAssessedHealthStatus
___ __________ ______ ________________________
50 {'Male' } 72 Excellent
50 {'Male' } 68 Good
49 {'Male' } 70 Fair
49 {'Male' } 68 Poor
49 {'Female'} 64 Good
49 {'Female'} 63 Good
48 {'Male' } 71 Good
48 {'Male' } 71 Good
48 {'Male' } 66 Fair
48 {'Female'} 66 Excellent
通过按 Gender
变量排序,再按 Age
变量排序,获取包含最年轻女性患者的前 10 行。
TB = topkrows(T,10,{'Gender','Age'},'ascend')
TB=10×4 table
Age Gender Height SelfAssessedHealthStatus
___ __________ ______ ________________________
25 {'Female'} 63 Good
25 {'Female'} 64 Excellent
27 {'Female'} 69 Fair
28 {'Female'} 65 Good
28 {'Female'} 65 Good
28 {'Female'} 66 Good
29 {'Female'} 63 Excellent
29 {'Female'} 68 Excellent
29 {'Female'} 64 Good
30 {'Female'} 67 Excellent
通过将 Age
变量的排序方向更改为 'descend'
,获取年龄最大的前 10 名女性患者。
TB = topkrows(T,10,{'Gender','Age'},{'ascend','descend'})
TB=10×4 table
Age Gender Height SelfAssessedHealthStatus
___ __________ ______ ________________________
49 {'Female'} 64 Good
49 {'Female'} 63 Good
48 {'Female'} 65 Excellent
48 {'Female'} 66 Excellent
48 {'Female'} 64 Excellent
48 {'Female'} 64 Good
48 {'Female'} 66 Excellent
47 {'Female'} 66 Excellent
46 {'Female'} 68 Good
45 {'Female'} 68 Excellent
对复数排序
先按绝对值再按实部对复矩阵进行排序。
创建一个由随机复数组成的 100×2 矩阵。
valRange = [-10 10]; X = randi(valRange,100,2) + 1i*randi(valRange,100,2);
获取矩阵的前 10 行。默认情况下,topkrows
按绝对值比较复数。
TA = topkrows(X,10)
TA = 10×2 complex
-10.0000 + 9.0000i 10.0000 - 2.0000i
-8.0000 + 9.0000i 2.0000 - 8.0000i
9.0000 + 8.0000i 4.0000 + 7.0000i
-6.0000 +10.0000i -8.0000 - 7.0000i
6.0000 -10.0000i -1.0000 - 5.0000i
6.0000 -10.0000i 0.0000 + 5.0000i
-7.0000 + 9.0000i -2.0000 - 5.0000i
9.0000 - 7.0000i 10.0000 + 7.0000i
9.0000 - 7.0000i 6.0000 + 6.0000i
-9.0000 - 7.0000i 9.0000 + 9.0000i
通过指定 'ComparisonMethod'
名称-值对组,仅使用复数的实部来获取矩阵的前 10 行。
TB = topkrows(X,10,'ComparisonMethod','real')
TB = 10×2 complex
10.0000 + 4.0000i -3.0000 - 7.0000i
10.0000 + 3.0000i 4.0000 + 5.0000i
10.0000 + 2.0000i 5.0000 - 7.0000i
10.0000 - 1.0000i -1.0000 - 8.0000i
10.0000 - 1.0000i -6.0000 +10.0000i
10.0000 - 4.0000i -9.0000 + 0.0000i
10.0000 - 5.0000i -8.0000 - 3.0000i
9.0000 + 8.0000i 4.0000 + 7.0000i
9.0000 + 5.0000i -10.0000 + 0.0000i
9.0000 + 1.0000i 1.0000 - 9.0000i
输入参数
X
— 输入数组
数值数组 | 逻辑数组 | 字符数组 | 字符串数组 | 分类数组 | 日期时间数组 | 持续时间数组
输入数组,指定为数值数组、逻辑数组、字符数组、字符串数组、分类数组、日期时间数组或持续时间数组。
如果
X
是一个非有序分类数组,topkrows
将根据categories(X)
返回的类别的顺序按降序对元素进行排序。如果
X
包含NaN
、NaT
或其他缺失值,则topkrows
会将缺失值放在降序排序的末尾。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
| categorical
| datetime
| duration
复数支持: 是
T
— 输入表
表 | 时间表
输入表,指定为表或时间表。
数据类型: table
| timetable
k
— 要返回的行数
标量
要返回的行数,指定为非负整数标量。如果 k
大于 X
的行数,则 topkrows
返回 X
的总行数。
col
— 要作为排序依据的列
标量 | 向量
要作为排序依据的列,指定为正整数标量或由正整数组成的向量。
示例: B = topkrows(X,100,[1 3])
在返回前 100 行之前先对第一列和第三列进行排序。
vars
— 要作为排序依据的变量
标量 | 向量 | 变量名称 | 字符串数组 | 字符向量元胞数组 | pattern
标量 | 'RowNames'
要作为排序依据的变量,指定为下表中的选项之一。
选项 | 示例 | 描述 |
---|---|---|
正整数 | topkrows(T,k,3) | 整数 n 指定 T.Properties.VariableNames{n} 返回的要作为排序依据的变量的索引。 |
正整数向量 | topkrows(T,k,[1 3]) | 向量 [n1 n2 …] 指定 T.Properties.VariableNames{[n1 n2 …]} 返回的要作为排序依据的多个变量的索引。 |
逻辑向量 | topkrows(T,k,[true false true]) | 使用 true 或 false 值指定要作为排序依据的一个或多个变量。 |
变量名称 | topkrows(T,k,"Var3") | 将排序变量指定为 T.Properties.VariableNames 中列出的变量名称之一。 |
字符串数组 | topkrows(T,k,["Var1","Var3"]) | 指定从 T.Properties.VariableNames 中选择的多个排序变量。 |
字符向量元胞数组 | topkrows(T,k,{'Var1','Var3'}) | 指定从 T.Properties.VariableNames 中选择的多个排序变量。 |
pattern 标量 | topkrows(T,k,"V" + wildcardPattern) | 指定从 T.Properties.VariableNames 中选择的多个排序变量。 |
'RowNames' | topkrows(T,k,'RowNames') | 仅适用于表。此选项按行名称对结果进行排序。 |
示例: B = topkrows(X,k,[1 3])
对第一列和第三列进行排序。
示例: B = topkrows(X,k,"Year")
使用 Year
变量进行排序。
direction
— 排序方向
'descend'
(默认) | 'ascend'
| 元胞数组
排序方向,指定为 'descend'
、'ascend'
或包含这两个值的某种组合的元胞数组。
如果 direction
是一个元胞数组,则必须包含与 col
或 vars
指定的每个排序列对应的 'descend'
或 'ascend'
。如果不指定 col
或 vars
,则元胞数组必须包含对应于 X
中的每一列或 T
中的每个变量的 'descend'
或 'ascend'
。
method
— 复数的比较方法
'auto'
(默认) | 'real'
| 'abs'
复数的比较方法,指定为下列值之一:
'auto'
-(默认值)按'real'
比较实数,按'abs'
比较复数。'real'
- 按实部real(A)
比较数字。实部相等的数字再按虚部imag(A)
进行比较。'abs'
- 按绝对值abs(A)
比较数字。模相等的数字再按相位角angle(A)
进行比较。
此选项不支持非数值输入数据(datetime
、duration
、string
等)。
输出参量
B
— 请求的行
数组
请求的行,以与 X
或 T
同类的数组形式返回。
I
— 行索引
向量
行索引,以向量形式返回。I
描述所选行的顺序,使得 B = X(I,:)
或 B = T(I,:)
。
提示
topkrows
不会对输入数据进行完全排序,因此当请求的行数较少时,它通常比sort
和sortrows
要快。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持以下类型:
cell
、table
、categorical
、duration
和datetime
。对于固定大小的编译,
k
的值必须为常量。vars
输入参量不支持模式表达式。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2016b 中推出R2017b: tall 数组的行为更改
topkrows
对 tall 数组进行操作的一些行为已发生变化:
topkrows
将NaN
、NaT
和其他缺失值放在降序排序的末尾。在以前的版本中,topkrows
将缺失值放在降序排序的开头。topkrows
不再接受仅包含标量数值的 tall 元胞数组作为输入。在使用topkrows
之前,请使用cell2mat
将标量数值的 tall 元胞数组转换为 tall 矩阵。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)