本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

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(___,direction) 使用上述任何语法指定排序方向。direction 可以是 'ascend''descend' 或包含这两个值的元胞数组。

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

示例

B = topkrows(___,'ComparisonMethod',method) 指定如何比较复数。比较方法可以是 '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(___,'ComparisonMethod',method) 指定如何比较复数。比较方法可以是 'auto''real''abs'

[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,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 是一个非有序分类数组,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 中选择的多个排序变量。
'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) 进行比较。

此选项不支持非数值输入数据(datetimedurationstring 等)。

输出参数

全部折叠

请求的行,以与 XT 同类的数组形式返回。

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

提示

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

兼容性考虑

全部展开

R2017b 中的行为有变化

扩展功能

另请参阅

| | | | |

在 R2016b 中推出