主要内容

topkrows

按排序顺序的前若干行

说明

数组数据

B = topkrows(X,k)X 中的行进行排序并返回排序后的数据的前 k 行。行按降序(对于数值数据)或字母顺序倒序(对于文本数据)排序。topkrows 基于第一列中的元素进行排序。当第一列包含值相等的元素时,topkrows 将根据下一列中的元素进行排序,并对后续的相等值重复此行为。

示例

B = topkrows(X,k,col)col 指定的列对结果进行排序。使用此语法可连续执行多列排序。例如,topkrows(X,k,5) 基于第五列中的元素按降序对 X 的行进行排序。topkrows(X,k,[4 6]) 首先基于第四列中的元素按降序对行进行排序,然后基于第六列中的元素进一步排序。

示例

B = topkrows(X,___,direction) 使用上述任一语法指定排序方向。

例如,topkrows(A,2,[2 3],{'ascend' 'descend'}) 首先基于第 2 列的元素按升序对行进行排序,从而获得前 2 行。然后基于第 3 列中的元素,对第 2 列中具有相等条目的行按降序排序。

示例

B = topkrows(X,___,'ComparisonMethod',method) 指定如何比较 X 中的复数。比较方法可以是 'auto''real''abs'

示例

[B,I] = topkrows(X,___) 还返回描述选定行的顺序的索引向量 I,使得 B = X(I,:)

表数据

B = topkrows(T,k) 按照排序顺序返回表或时间表 T 中的前 k 行。表行按其所有变量以降序排序,时间表行按时间以降序排序。

示例

B = topkrows(T,k,vars)vars 指定的变量对结果进行排序。使用此语法可按多个变量依次排序。例如,topkrows(T,k,{'Var1','Var2'}) 首先基于 Var1 中的元素对 T 的行进行排序,然后基于 Var2 中的元素进行排序。

示例

B = topkrows(T,k,vars,direction) 指定排序的方向。例如,使用 'ascend'T 按升序排序。

B = topkrows(T,k,vars,___,'ComparisonMethod',method) 指定如何比较 T 中的复数。

[B,I] = topkrows(T,___) 还返回描述选定行的顺序的索引向量 I,使得 B = T(I,:)

示例

全部折叠

按照不同的排序顺序对矩阵的行进行排序,并查看前几行。

创建一个由 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,Smoker,Height,SelfAssessedHealthStatus)
T=100×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    38     true        71             Excellent        
    43     false       69             Fair             
    38     false       64             Good             
    40     false       67             Fair             
    49     false       64             Good             
    46     false       68             Good             
    33     true        64             Good             
    40     false       68             Good             
    28     false       68             Excellent        
    31     false       66             Excellent        
    45     false       68             Excellent        
    42     false       66             Poor             
    25     false       71             Poor             
    39     true        72             Excellent        
    36     false       65             Good             
    48     true        71             Good             
      ⋮

按降序对表进行排序,并获取前 10 行。结果按照第一个变量 Age 以降序排列。再按照其余的列继续排序:

  • 如果年龄相同,则按 Smoker 变量继续排序。

  • 如果吸烟者状态相同,则按 Height 变量继续排序。

  • 如果身高相同,则按 SelfAssessedHealthStatus 变量继续排序。

TA = topkrows(T,10)
TA=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    50     true        72             Excellent        
    50     false       68             Good             
    49     true        68             Poor             
    49     true        63             Good             
    49     false       70             Fair             
    49     false       64             Good             
    48     true        71             Good             
    48     true        64             Excellent        
    48     false       71             Good             
    48     false       66             Excellent        

通过按 Smoker 变量排序,再按 Age 变量排序,获取包含最年轻非吸烟者的前 10 行。

TB = topkrows(T,10,["Smoker" "Age"],"ascend")
TB=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    25     false       71             Poor             
    25     false       70             Poor             
    25     false       63             Good             
    25     false       64             Excellent        
    25     false       66             Good             
    28     false       68             Excellent        
    28     false       65             Good             
    28     false       66             Good             
    29     false       63             Excellent        
    29     false       68             Excellent        

通过将 Age 变量的排序方向更改为 "descend",获取年龄最大的前 10 名非吸烟者。

TB = topkrows(T,10,["Smoker" "Age"],["ascend" "descend"])
TB=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    50     false       68             Good             
    49     false       64             Good             
    49     false       70             Fair             
    48     false       65             Excellent        
    48     false       66             Excellent        
    48     false       64             Good             
    48     false       71             Good             
    48     false       66             Excellent        
    48     false       66             Fair             
    47     false       70             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 是一个非有序分类数组,topkrows 将根据 categories(X) 返回的类别的顺序按降序对元素进行排序。

  • 如果 X 包含 NaNNaT 或其他缺失值,则 topkrows 会将缺失值放在降序排序的末尾。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | categorical | datetime | duration
复数支持:

输入表,指定为表或时间表。

数据类型: table | timetable

要返回的行数,指定为非负整数标量。如果 k 大于 X 的行数,则 topkrows 返回 X 的总行数。

要作为排序依据的列,指定为正整数标量或由正整数组成的向量。

示例: B = topkrows(X,100,[1 3]) 在返回前 100 行之前先对第一列和第三列进行排序。

要作为排序依据的变量,指定为下表中的选项之一。

选项示例描述
正整数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])使用 truefalse 值指定要作为排序依据的一个或多个变量。
变量名称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 变量进行排序。

排序方向,指定为 'descend''ascend',或指定这些值的组合的字符串数组或字符向量元胞数组。

如果 direction 是一个元胞数组,则必须包含与 colvars 指定的每个排序列对应的 'descend''ascend'。如果不指定 colvars,则元胞数组必须包含对应于 X 中的每一列或 T 中的每个变量的 'descend''ascend'

数值输入的比较方法,指定为以下值之一:

  • 'auto' -(默认值)按 'real' 比较实数,按 'abs' 比较复数。

  • 'real' - 按实部 real(A) 比较数字。实部相等的数字再按虚部 imag(A) 进行比较。

  • 'abs' - 按绝对值 abs(A) 比较数字。模相等的数字再按相位角 angle(A) 进行比较。

输出参量

全部折叠

请求的行,以数组、表或时间表形式返回。B 的类型与输入数据相同。

行索引,以列向量形式返回。I 描述所选行的顺序,使得 B = X(I,:)B = T(I,:)

提示

  • topkrows 不会对输入数据进行完全排序,因此当请求的行数较少时,它通常比 sortsortrows 要快。

扩展功能

全部展开

版本历史记录

在 R2016b 中推出

全部展开

另请参阅

| | | | |