sortrows
行列または table の行の並べ替え
構文
説明
配列データ
は、行を並べ替えるための追加パラメーターを指定します。たとえば、B = sortrows(A,___,Name,Value)sortrows(A,'ComparisonMethod','abs') は A の要素を大きさの順に並べ替えます。
テーブル データ
は、table または timetable の行を並べ替えます。tblB = sortrows(tblA)
tblAが table の場合、sortrowsは最初の変数の値に基づいてtblAを昇順で並べ替えます。最初の変数の要素が繰り返し存在する場合、sortrowsは 2 番目の変数を基準に並べ替え、以下同様に続きます。tblAが timetable の場合、sortrowsはtblAの行をその行時間の昇順に並べ替えます。ただし、行は行時間のみを基準にして並べ替えられます。行時間が繰り返し存在する場合、sortrowsは timetable 変数の要素を基準にした並べ替えを行いません。
は、最初の次元に沿って、行ラベルに基づいて並べ替えます。tblB = sortrows(tblA,rowDimName)
tblAが table の場合、行ラベルは行名です。tblAが timetable の場合、行ラベルは行時間です。
は、table または timetable の行を並べ替えるための追加パラメーターを指定します。たとえば、tblB = sortrows(tblA,___,Name,Value)sortrows(tblA,'Var1','MissingPlacement','first') は Var1 の要素に基づいて並べ替えを行い、NaN などの欠損値がある要素を table の最初に配置します。
例
行列を作成し、1 列目の要素に基づいて行を昇順に並べ替えます。1 列目の列に繰り返されている要素がある場合、sortrows は 2 列目の要素を参照して同順位のものを並べ替えます。2 列目に繰り返されている要素がある場合、sortrows は 3 列目を参照し、以下同様に処理されます。
rng default;
A = floor(rand([6 7])*100);
A(1:4,1) = 95; A(5:6,1) = 76; A(2:4,2) = 7; A(3,3) = 48A = 6×7
95 27 95 79 67 70 69
95 7 48 95 75 3 31
95 7 48 65 74 27 95
95 7 14 3 39 4 3
76 15 42 84 65 9 43
76 97 91 93 17 82 38
B = sortrows(A)
B = 6×7
76 15 42 84 65 9 43
76 97 91 93 17 82 38
95 7 14 3 39 4 3
95 7 48 65 74 27 95
95 7 48 95 75 3 31
95 27 95 79 67 70 69
A の行を 2 列目の値に基づいて並べ替えます。指定された列に繰り返されている要素がある場合、対応する行は元の順序を保持します。
C = sortrows(A,2)
C = 6×7
95 7 48 95 75 3 31
95 7 48 65 74 27 95
95 7 14 3 39 4 3
76 15 42 84 65 9 43
95 27 95 79 67 70 69
76 97 91 93 17 82 38
A の行を 1 列目の要素に基づいて並べ替え、同順位の行があれば 7 列目を参照して並べ替えます。
D = sortrows(A,[1 7])
D = 6×7
76 97 91 93 17 82 38
76 15 42 84 65 9 43
95 7 14 3 39 4 3
95 7 48 95 75 3 31
95 27 95 79 67 70 69
95 7 48 65 74 27 95
A の行を 4 列目の要素に基づいて降順に並べ替え、出力ベクトル index を表示して行の並べ替えを確認します。
[E,index] = sortrows(A,4,'descend')E = 6×7
95 7 48 95 75 3 31
76 97 91 93 17 82 38
76 15 42 84 65 9 43
95 27 95 79 67 70 69
95 7 48 65 74 27 95
95 7 14 3 39 4 3
index = 6×1
2
6
5
1
3
4
複素数を含む行列を作成し、この行列の行を 1 列目の要素に基づいて昇順に並べ替えます。A(1,1) と A(3,1) の大きさは等しいため、sortrows はそれらの角度を計算して並べ替え順序を決定します。
A = [1+2i 3+i i; 2+10i 6i 2+5i; 2+i 4 3+3i]
A = 3×3 complex
1.0000 + 2.0000i 3.0000 + 1.0000i 0.0000 + 1.0000i
2.0000 +10.0000i 0.0000 + 6.0000i 2.0000 + 5.0000i
2.0000 + 1.0000i 4.0000 + 0.0000i 3.0000 + 3.0000i
B = sortrows(A)
B = 3×3 complex
2.0000 + 1.0000i 4.0000 + 0.0000i 3.0000 + 3.0000i
1.0000 + 2.0000i 3.0000 + 1.0000i 0.0000 + 1.0000i
2.0000 +10.0000i 0.0000 + 6.0000i 2.0000 + 5.0000i
angle(A(1,1))
ans = 1.1071
angle(A(3,1))
ans = 0.4636
'real' オプションを使用して、A の行を実数部で並べ替えます。A(2,1) と A(3,1) の実数部は等しいため、sortrows は虚数部を使用して並べ替え順序を決定します。
C = sortrows(A,'ComparisonMethod','real')
C = 3×3 complex
1.0000 + 2.0000i 3.0000 + 1.0000i 0.0000 + 1.0000i
2.0000 + 1.0000i 4.0000 + 0.0000i 3.0000 + 3.0000i
2.0000 +10.0000i 0.0000 + 6.0000i 2.0000 + 5.0000i
imag(A(2,1))
ans = 10
imag(A(3,1))
ans = 1
6 行 2 列の string 配列を作成します。1 列目の要素に基づいてアルファベットの昇順で行を並べ替えます。1 列目に繰り返されている要素がある場合、2 列目を使用して同順位のものを並べ替えます。
A = ["B" "Y"; "B" "Z"; "A" "Z"; ... "B" "X"; "A" "Y"; "A" "X"]; B1 = sortrows(A)
B1 = 6×2 string
"A" "X"
"A" "Y"
"A" "Z"
"B" "X"
"B" "Y"
"B" "Z"
行をもう一度並べ替えます。今回は、1 列目の同順位の要素について、2 列目の要素をアルファベットの降順で並べ替えて処理します。
B2 = sortrows(A,[1 2],["ascend" "descend"])
B2 = 6×2 string
"A" "Z"
"A" "Y"
"A" "X"
"B" "Z"
"B" "Y"
"B" "X"
table の行を変数値で並べ替えます。
5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。
LastName = ["Smith";"Johnson";"Williams";"Jones";"Brown"]; Age = [38;43;38;40;49]; Height = [71;69;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
___ ______ ______ _____________
Smith 38 71 176 124 93
Johnson 43 69 163 109 77
Williams 38 64 131 125 83
Jones 40 67 133 117 75
Brown 49 64 119 122 80
テーブルの行を並べ替えます。関数 sortrows は行を昇順に並べ替えます。最初に変数 Age で並べ替え、年齢が等しい行が 2 行あれば次に変数 Height で並べ替えます。
tblB = sortrows(tblA)
tblB=5×4 table
Age Height Weight BloodPressure
___ ______ ______ _____________
Williams 38 64 131 125 83
Smith 38 71 176 124 93
Jones 40 67 133 117 75
Johnson 43 69 163 109 77
Brown 49 64 119 122 80
5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。
LastName = ["Smith";"Johnson";"Williams";"Jones";"Brown"]; Age = [38;43;38;40;49]; Height = [71;69;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
___ ______ ______ _____________
Smith 38 71 176 124 93
Johnson 43 69 163 109 77
Williams 38 64 131 125 83
Jones 40 67 133 117 75
Brown 49 64 119 122 80
table の行を行名に基づいて昇順に並べ替え、行の並べ替え方法を示すインデックス ベクトルを返します。
[tblB,index] = sortrows(tblA,"RowNames")tblB=5×4 table
Age Height Weight BloodPressure
___ ______ ______ _____________
Brown 49 64 119 122 80
Johnson 43 69 163 109 77
Jones 40 67 133 117 75
Smith 38 71 176 124 93
Williams 38 64 131 125 83
index = 5×1
5
2
4
1
3
並べ替えていない元の table にインデックス ベクトルを使用してインデックスを付け、その行に並べ替えられた順序でアクセスできます。
tblA(index,:)
ans=5×4 table
Age Height Weight BloodPressure
___ ______ ______ _____________
Brown 49 64 119 122 80
Johnson 43 69 163 109 77
Jones 40 67 133 117 75
Smith 38 71 176 124 93
Williams 38 64 131 125 83
5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。
LastName = ["Sweet";"Jacobson";"Wang";"Joiner";"Berger"]; Age = [38;43;38;40;49]; Height = [71;69;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 71 176 124 93
Jacobson 43 69 163 109 77
Wang 38 64 131 125 83
Joiner 40 67 133 117 75
Berger 49 64 119 122 80
table の行を Height で昇順に並べ替え、次に Weight で降順に並べ替えます。
tblB = sortrows(tblA,["Height" "Weight"],["ascend" "descend"])
tblB=5×4 table
Age Height Weight BloodPressure
___ ______ ______ _____________
Wang 38 64 131 125 83
Berger 49 64 119 122 80
Joiner 40 67 133 117 75
Jacobson 43 69 163 109 77
Sweet 38 71 176 124 93
5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。変数 Weight には欠損値が格納されています。
LastName = ["Sweet";"Jacobson";"Wang";"Joiner";"Berger"]; Age = [38;43;38;40;49]; Height = [71;69;64;67;64]; Weight = [176;NaN;131;133;NaN]; 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 71 176 124 93
Jacobson 43 69 NaN 109 77
Wang 38 64 131 125 83
Joiner 40 67 133 117 75
Berger 49 64 NaN 122 80
table の行を Weight で昇順に並べ替え、NaN を含む行を最初に配置します。
tblB = sortrows(tblA,"Weight",MissingPlacement="first")
tblB=5×4 table
Age Height Weight BloodPressure
___ ______ ______ _____________
Jacobson 43 69 NaN 109 77
Berger 49 64 NaN 122 80
Wang 38 64 131 125 83
Joiner 40 67 133 117 75
Sweet 38 71 176 124 93
timetable を作成します。
TimeDuration = [seconds(3) seconds(2) seconds(1) seconds(5) seconds(4)]'; TT = timetable(TimeDuration,[98;97.5;97.9;98.1;101],[120;111;119;117;118])
TT=5×2 timetable
TimeDuration Var1 Var2
____________ ____ ____
3 sec 98 120
2 sec 97.5 111
1 sec 97.9 119
5 sec 98.1 117
4 sec 101 118
行を timetable の行時間で並べ替えます。
B = sortrows(TT)
B=5×2 timetable
TimeDuration Var1 Var2
____________ ____ ____
1 sec 97.9 119
2 sec 97.5 111
3 sec 98 120
4 sec 101 118
5 sec 98.1 117
入力引数
入力配列。列ベクトルまたは行列として指定します。
データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration
複素数のサポート: あり
列並べ替えベクトル。非ゼロ整数スカラーまたは非ゼロ整数のベクトルとして指定します。指定された各整数値は並べ替えの基準にする列を表します。負の整数は並べ替え順序が降順であることを表します。
並べ替えの方向。'ascend'、'descend'、あるいはこれらの値の組み合わせを指定する string 配列または文字ベクトルの cell 配列として指定します。
direction が 'ascend' または 'descend' の場合、その並べ替え方向がすべての列並べ替えベクトルまたは並べ替え変数に適用されます。direction が string 配列または文字ベクトルの cell 配列の場合、各エントリが列並べ替えベクトルまたは並べ替え変数に対応します。
column と direction の両方を指定すると、direction によって並べ替え方向が決まり、sortrows は column の要素の符号を無視します。
例: sortrows(X,[2 3],{'ascend' 'descend'}) は、最初に X の 2 列目に従って昇順に行を並べ替えます。次に、2 列目の等しいエントリがある行を、3 列目に従って降順で並べ替えます。
入力 table。table または timetable として指定します。tblA の各変数は、sort または sortrows に対する有効な入力でなければなりません。
入力 table または timetable の最初の次元の名前。string スカラーまたは文字ベクトルとして指定します。
tblAが行名を含む table の場合、rowDimNameは table の最初の次元の名前です。既定では、最初の次元の名前は"Row"です。次元名は table のプロパティです。tblA.Properties.DimensionNamesを使用するとtblAの次元名にアクセスできます。tblAが timetable の場合、rowDimNameは行時間のベクトルの名前です。timetable の作成時にTimeやDateなどの名前を指定できます。また、tblA.Properties.DimensionNamesを使用して次元名にアクセスすることもできます。
例: table T に行名があり、T.Properties.DimensionName{1} = "Name" を使用して最初の次元の名前を変更した場合、sortrows(T,"Name") は行名でこの table を並べ替えます。
例: timetable TT に Date という名前の時間ベクトルが含まれる場合、sortrows(TT,"Date") は、Date に含まれる日付と時間に基づいて timetable を並べ替えます。
データ型: string | char
並べ替え変数。スカラー整数、整数のベクトル、変数名、変数名の string 配列、変数名の cell 配列、pattern スカラー、または logical ベクトルとして指定します。vars は並べ替えの基準となる table 変数を示します。
direction 引数を指定しなかった場合、vars の要素の符号によって変数の並べ替え方向が決まります。要素が正の整数の場合、sortrows は、tblA の対応する変数を昇順に並べ替えます。要素が負の整数の場合、sortrows は、tblA の対応する変数を降順に並べ替えます。それ以外の場合、direction 引数を指定すると、sortrows は vars の符号を無視し、指定された変数を direction に従って並べ替えます。
例: sortrows(tblA,["Height","Weight"]) は tblA の行を、最初に変数 Height で昇順に並べ替え、次に変数 Weight で同順位のものを並べ替えます。
例: sortrows(tblA,"X" + wildcardPattern) は、名前が "X" の文字で始まる table 変数で tblA の行を昇順に並べ替えます。ここでは、ワイルドカード パターンを使用して名前の残りの部分と一致させています。
例: sortrows(tblA,[1 4]) は tblA の最初の変数で昇順に並べ替え、次に 4 番目の変数で同順位のものを並べ替えます。
例: sortrows(TT,["Time","X"]) は最初に timetable TT の行時間を昇順に並べ替え、次に table 変数 X で同順位のものを並べ替えます。
データ型: double | single | string | char | cell | pattern | logical
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: sortrows(A,'MissingPlacement','last')
欠損値 (NaN、NaT、<undefined>、missing) の配置。'MissingPlacement' と、次のいずれかで構成されるコンマ区切りのペアとして指定します。
'auto'— 欠損値の要素は、昇順では最後、降順では最初に配置されます。'first'— 欠損値の要素は最初に配置されます。'last'— 欠損値の要素は最後に配置されます。
数値入力の要素の比較方法。'ComparisonMethod' と次の値のいずれかとして指定します。
'auto'—Aの行を、Aが実数の場合はreal(A)、Aが複素数の場合はabs(A)を基準にして並べ替えます。'real'—Aが実数または複素数の場合、Aの行をreal(A)を基準にして並べ替えます。Aの列に実数部が等しい要素がある場合、imag(A)を使用して同順位のものを並べ替えます。'abs'—Aが実数または複素数の場合、Aの行をabs(A)を基準にして並べ替えます。Aの列に大きさが等しい要素がある場合、区間 (-π,π] でangle(A)を使用して同順位のものを並べ替えます。
出力引数
並べ替えられた配列。列ベクトルまたは行列として返されます。B のサイズは A と同じです。
データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration
並べ替えられた table。tblA と同じ変数をもつ table または timetable として返されます。
並べ替えインデックス。列ベクトルとして返されます。並べ替えインデックスは、B = A(index,:) となる入力の行の並べ替えを示します。
関数 sortrows は安定した並べ替えアルゴリズムを使用します。そのため、入力に繰り返しの値が含まれている場合、並べ替えインデックスは、並べ替えの方向に関係なく、入力における元の順序のままになります。たとえば、A = [1 1; 2 2; 1 2; 2 2] の場合、[Ba,Ia] = sortrows(A,'ascend') は並べ替えインデックス Ia = [1; 3; 2; 4] を返し、[Bd,Id] = sortrows(A,'descend') は並べ替えインデックス Id = [2; 4; 3; 1] を返します。
データ型: double
拡張機能
sortrows 関数は tall 配列をサポートしていますが、以下の使用上の注意および制限があります。
行名による並べ替えはサポートされていません。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
cell または string の入力配列はサポートされていません。
Aが複素数で、その虚数部がすべて 0 である場合、MATLAB® はsortrows(A)を呼び出す前にAをreal(A)に変換することがあります。この場合、MATLAB はAの行をreal(A)で並べ替えますが、生成されるコードはAの行をabs(A)で並べ替えます。生成されるコードを MATLAB と一致させるには、sortrows(real(A))またはsortrows(A,'ComparisonMethod','real')を使用します。ゼロ値の虚数部をもつ複素数データのコード生成 (MATLAB Coder)を参照してください。tblAが table または timetable の場合、入力引数varsは定数でなければなりません。tblAが table または timetable であり、複数列をもつ文字ベクトルの cell 配列である変数を含む場合、その変数の値を使用してtblAを並べ替えることはできません。入力引数
varsはパターン式をサポートしません。
使用上の注意および制限:
最初の入力引数は cell 配列であってはなりません。
Aが複素数で、その虚数部がすべて 0 である場合、MATLAB はsortrows(A)を呼び出す前にAをreal(A)に変換することがあります。この場合、MATLAB はAの行をreal(A)で並べ替えますが、生成されるコードはAの行をabs(A)で並べ替えます。生成されるコードを MATLAB と一致させるには、sortrows(real(A))またはsortrows(A,'ComparisonMethod','real')を使用します。
sortrows 関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
sortrows 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
cell 配列の並べ替えはサポートされていません。
スパース入力はサポートされません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
sortrows 関数は分散配列をサポートしますが、次の使用上の注意および制限があります。
cell 配列の並べ替えはサポートされていません。
table 入力、timetable 入力、datetime 入力、duration 入力はサポートされていません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入sortrows 関数で、int8 型、uint8 型、int16 型、uint16 型の並べ替え変数を使用して行を並べ替えるときのパフォーマンスが向上しています。この向上は、並べ替える行数が大きいときに最も顕著になります。
たとえば、次のコードでは、int8 型の変数に基づいて 10,000,000 行の table を並べ替えています。以前のリリースと比較して、このコードは約 2.8 倍速くなっています。
function timingTest A = randi(intmax("int8"),[1e7 1],"int8"); B = rand([1e7 1]); T = table(A,B); S = @() sortrows(T,"A"); t = timeit(S) end
おおよその実行時間は以下のとおりです。
R2025b: 1.22 秒
R2026a: 0.44 秒
このコードの時間測定では、Windows® 11、AMD EPYC™ 74F3 24 コア プロセッサ (3.19 GHz) 搭載のテスト システムで、関数 timingTest を呼び出しました。
参考
issortedrows | sort | issorted | topkrows
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)