Main Content

issortedrows

确定矩阵或表的行是否已排序

说明

示例

当矩阵 A 的第一列中的元素按升序列出时,TF = issortedrows(A) 返回逻辑标量 1 (true)。否则,issortedrows 返回 0 (false)。当第一列具有连续的重复元素时,issortedrows 确定下一列是否按升序排序,并对后续的相等值重复此行为。

示例

A 根据向量 column 中指定的列排序时,TF = issortedrows(A,column) 将返回 1。例如,issortedrows(A,[4 6]) 首先检查 A 的第四列是否按升序排序,然后检查第六列是否按升序排列,以进行判断。

示例

A 的第一列按 direction 指定的顺序排序时,TF = issortedrows(___,direction) 将为上述任何语法返回 1。例如,issortedrows(A,'monotonic') 会检查 A 的第一列是否按升序或降序排序。direction 也可以是一个字符向量元胞数组,表示要检查的每一列的排序方向。例如,issortedrows(A,[2 3],{'ascend' 'descend'}) 会检查 A 的第二列是否按升序排序,然后检查第三列是否按降序排列,以进行判断。

示例

TF = issortedrows(___,Name,Value) 指定用于检查排序顺序的其他参数。例如,issortedrows(A,'ComparisonMethod','abs') 会检查 A 的第一列中的元素是否按模进行排序。

示例

TF = issortedrows(tblA) 检查表中的行是否基于第一个变量中的元素按升序排列。如果第一个变量中的元素重复,则 issortedrows 检查第二个变量中的元素,依此类推。

如果 tblA 是时间表,则 issortedrows 将检查 tblA 中的行是否基于其行时间按升序排序。时间表的行时间沿时间表的第一个维度标记行。

示例

TF = issortedrows(tblA,'RowNames') 检查表中的行是否基于其行名称按升序排列。表的行名称沿表的第一个维度标记行。

tblA 是时间表时,不支持此语法。

示例

TF = issortedrows(tblA,rowDimName) 检查表中的行是否沿第一个维度按行标签 rowDimName 进行排序。

  • 如果 tblA 是表,则标签为行名称。

  • 如果 tblA 是时间表,则标签为行时间。

示例

TF = issortedrows(tblA,vars) 检查表中的行是否基于变量 vars 中的元素按升序排列。例如,如果 AgeWeighttblA 的变量,则 issortedrows(tblA,{'Age','Weight'}) 会检查行是否先按年龄,然后按体重以升序方式排列,以进行判断。

  • 如果 tblA 是包含行名称的表,则 vars 可以包含行名称。

  • 如果 tblA 是时间表,则 vars 可以包括行时间。

示例

TF = issortedrows(___,direction) 会基于上述任意语法检查表是否按 direction 指定的顺序排序。direction 可以是单个排序顺序,例如 'descend''monotonic',该排序顺序将应用于每个指定变量、行名称或行时间。direction 也可以是一个包含多个不同排序顺序的元胞数组,每个排序顺序对应于 issortedrows 要判断的一个指定变量、行名称或行时间。

示例

TF = issortedrows(___,Name,Value) 指定用于对表进行排序的其他参数。例如,issortedrows(tblA,'Var1','MissingPlacement','first') 检查 Var1 中的缺失元素(例如 NaNNaT)是否放置在表的开始位置。

示例

全部折叠

创建一个矩阵,并确定其行是否基于第一列中的值按升序排列。由于第一列中有重复的元素,因此 sortrows 会寻找第二列以确定矩阵行是否已排序。

A = [1 2 9; 1 5 8; 4 0 7]
A = 3×3

     1     2     9
     1     5     8
     4     0     7

TF = issortedrows(A)
TF = logical
   1

确定 A 中的行是否基于第三列中的值按升序排序。

TF = issortedrows(A,3)
TF = logical
   0

确定 A 中的行是否基于第三列中的值按降序排序。

TF = issortedrows(A,3,'descend')
TF = logical
   1

创建一个包含复数的矩阵,并确定其行是否基于第一列中的元素的实部按升序排列。由于第一列中的元素具有相等的实部,因此 issortedrows 随后将检查虚部以进行排序。

A = [1+i 2i; 1+2i 3+4i]
A = 2×2 complex

   1.0000 + 1.0000i   0.0000 + 2.0000i
   1.0000 + 2.0000i   3.0000 + 4.0000i

TF = issortedrows(A,'ComparisonMethod','real')
TF = logical
   1

对于一个包含五位患者信息的表,确定表行的排序方式。

创建一个包含四个变量的表,并确定表中的行是否基于年龄按升序排列。由于年龄变量包含重复的元素,因此 issortedrows 随后将检查下一列 (Height) 以进行排序。

LastName = {'Sweet';'Jacobson';'Wang';'Joiner';'Berger'};
Age = [38;38;40;43;49];
Height = [69;71;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
tblA=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Sweet       38       69       176       124     93  
    Jacobson    38       71       163       109     77  
    Wang        40       64       131       125     83  
    Joiner      43       67       133       117     75  
    Berger      49       64       119       122     80  

TF = issortedrows(tblA)
TF = logical
   1

检查表中各行是否按姓氏排序,姓氏是 tblA 的行名称。

TF = issortedrows(tblA,'RowNames')
TF = logical
   0

检查表中各行是否先基于年龄按升序排序,然后基于体重按降序排序。

TF = issortedrows(tblA,{'Age','Weight'},{'ascend','descend'})
TF = logical
   1

创建一个时间表,并检查时间表的行是否基于行时间按升序排序。同时检查缺失元素是否放在最后。

Time = [seconds(1:3) NaN NaN]';
TT = timetable(Time,[98;97.5;97.9;98.1;99.9],[120;111;119;117;112],...
               'VariableNames',{'Temperature','Distance'})
TT=5×2 timetable
     Time      Temperature    Distance
    _______    ___________    ________

    1 sec           98          120   
    2 sec         97.5          111   
    3 sec         97.9          119   
    NaN sec       98.1          117   
    NaN sec       99.9          112   

TF = issortedrows(TT,'Time','MissingPlacement','last')
TF = logical
   1

输入参数

全部折叠

输入数组,指定为列向量或矩阵。

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

列排序向量,指定为非零整数标量或非零整数向量。每个指定的整数值均指示要检查排序顺序的列。负整数表示排序顺序为降序。

排序方向,指定为以下值之一:

  • 'ascend'(默认值)- 检查数据是否按升序排序。数据可以包含连续的重复元素。

  • 'descend' - 检查数据是否按降序排列。数据可以包含连续的重复元素。

  • 'monotonic' - 检查数据是否按降序或升序排列。数据可以包含连续的重复元素。

  • 'strictascend' - 检查数据是否严格地按升序排列。数据不能包含重复元素或缺失元素。

  • 'strictdescend' - 检查数据是否严格地按降序排列。数据不能包含重复元素或缺失元素。

  • 'strictmonotonic' - 检查数据是否严格地按降序或升序排列。数据不能包含重复元素或缺失元素。

direction 也可以是包含这些字符向量列表的元胞数组,其中列表中的每个元素对应于 A 中的一列。例如,issortedrows(A,[2 4],{'ascend' 'descend'}) 首先检查 A 的行是否基于第二列按升序排列。然后,为了继续判断,issortedrows 将检查各行是否基于第四列按降序排列。

如果指定 column,则元胞数组中的元素数量必须与 column 的长度相匹配。如果未指定 column,则该元胞数组必须为 A 中的每一列包含一个元素,或是对所有列应用一个元素。

数据类型: char | cell

输入表,指定为表或时间表。tblA 中的每个变量必须是 sortsortrows 的有效输入。

数据类型: table | timetable

输入表或时间表的第一个维度的名称,指定为字符串标量或字符向量。

  • 如果 tblA 是包含行名称的表,则 rowDimName 是表的第一个维度的名称。默认情况下,第一个维度的名称为 'Row'。维度名称是表的属性。您可以使用 tblA.Properties.DimensionNames 访问 tblA 的维度名称。

  • 如果 tblA 是时间表,则 rowDimName 是行时间向量的名称。您可以在创建时间表时指定其名称,例如 TimeDate。也可以使用 tblA.Properties.DimensionNames 访问维度名称。

示例: 如果表 T 具有行名称,并且您使用 T.Properties.DimensionName{1} = "Name" 更改了第一个维度的名称,则 issortedrows(T,"Name") 会检查表是否按行名称排序。

示例: 如果时间表 TT 具有一个名为 Date 的时间向量,则 issortedrows(TT,"Date") 将检查时间表是否按 Date 包含的日期和时间排序。

数据类型: string | char

排序变量,指定为整数标量、整数向量、变量名称、变量名称的字符串数组、变量名称元胞数组、pattern 标量或逻辑向量。vars 指示要按其排序的表变量。

如果 vars 的元素为正整数,则 issortedrows 会检查 tblA 中相应变量的行是否按升序排序。如果 vars 的元素为负整数,则 issortedrows 会检查 tblA 中相应变量的行是否按降序排序。

示例: issortedrows(tblA,["Height","Weight"]) 检查 tblA 的行是否首先按变量 Height,然后按变量 Weight 以升序排序。

示例: issortedrows(tblA,"X" + wildcardPattern) 根据名称以字母 "X" 开头的表变量,使用通配符模式匹配名称中的其余字母,来检查 tblA 的行是否按升序排序。

示例: issortedrows(tblA,[1 4]) 首先检查表中各行是否基于第一个变量按升序排序,然后检查行是否基于第四个变量按升序排序。

示例: issortedrows(TT,["Time","X"]) 首先检查时间表的行时间是否按升序排序,然后检查行是否基于表变量 X 按升序排序。

数据类型: double | single | string | char | cell | pattern | logical

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: issortedrows(A,'MissingPlacement','last')

缺失值(NaNNaT<undefined>missing)的位置,指定为逗号分隔的对组,包含 'MissingPlacement' 和下列项之一:

  • 'auto' - 缺失的元素必须放在最后(对于升序排序)或放在最前面(对于降序排序),才会返回 1。

  • 'first' - 缺失的元素必须放在最前面,才会返回 1。

  • 'last' - 缺失的元素必须放在最后,才会返回 1。

元素比较方法,指定为逗号分隔的对组,包含 'ComparisonMethod' 和下列项之一:

  • 'auto' - 当 A 为实数时,检查 A 的行是否按 real(A) 排序,当 A 为复数时,检查 A 的行是否按 abs(A) 排序。

  • 'real' - 当 A 为实数或复数时,检查 A 的行是否按 real(A) 排序。如果列的元素具有连续相等的实部,则检查 imag(A) 以进行判断。

  • 'abs' - 当 A 为实数或复数时,检查 A 的行是否按 abs(A) 排序。如果列的元素具有连续相等的模,则检查区间 (-π,π] 中的 angle(A) 以进行判断。

扩展功能

版本历史记录

在 R2017a 中推出

另请参阅

| |