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

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 中推出