NumPy配列ndarrayの行・列を任意の順番に並べ替え、選択(抽出)

NumPy配列ndarrayの行・列は、ファンシーインデックスという仕組みを使って任意の順番に並べ替え(入れ替え)たり、選択(抽出)したりすることができます。 ファンシーインデックスについての詳細は以下の記事を参照。

昇順や降順に並べ替える(ソートする)には、np.sort()やnp.argsort()を使います。以下の記事を参照。

以下の二次元配列を例とします。

import numpy as np

a = np.arange(10, 35).reshape(5, 5)
print(a)
# [[10 11 12 13 14]
#  [15 16 17 18 19]
#  [20 21 22 23 24]
#  [25 26 27 28 29]
#  [30 31 32 33 34]]

列を任意の順番に並べ替え、選択(抽出)

任意の順番のインデックスのリストを参照することで、並べ替えたndarrayが得られる。

col_swap = a[:, [3, 2, 4, 0, 1]]
print(col_swap)
# [[13 12 14 10 11]
#  [18 17 19 15 16]
#  [23 22 24 20 21]
#  [28 27 29 25 26]
#  [33 32 34 30 31]]

逆順にしたい場合はリストよりもスライス::-1が簡単。

col_inverse = a[:, ::-1]
print(col_inverse)
# [[14 13 12 11 10]
#  [19 18 17 16 15]
#  [24 23 22 21 20]
#  [29 28 27 26 25]
#  [34 33 32 31 30]]

特定の列だけを抽出(選択)することもできます。重複しても問題ありません。

col_select = a[:, [2, 4, 0]]
print(col_select)
# [[12 14 10]
#  [17 19 15]
#  [22 24 20]
#  [27 29 25]
#  [32 34 30]]

col_select2 = a[:, [2, 2, 2]]
print(col_select2)
# [[12 12 12]
#  [17 17 17]
#  [22 22 22]
#  [27 27 27]
#  [32 32 32]]

行を任意の順番に並べ替え、選択(抽出)

行の場合も列の場合と同じ。 後方のインデックス, :は省略可能([..., :]は[...]と等価)。

row_swap = a[[3, 2, 4, 0, 1], :]
print(row_swap)
# [[25 26 27 28 29]
#  [20 21 22 23 24]
#  [30 31 32 33 34]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]

row_swap = a[[3, 2, 4, 0, 1]]
print(row_swap)
# [[25 26 27 28 29]
#  [20 21 22 23 24]
#  [30 31 32 33 34]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]

row_inverse = a[::-1]
print(row_inverse)
# [[30 31 32 33 34]
#  [25 26 27 28 29]
#  [20 21 22 23 24]
#  [15 16 17 18 19]
#  [10 11 12 13 14]]

row_select = a[[2, 4, 0]]
print(row_select)
# [[20 21 22 23 24]
#  [30 31 32 33 34]
#  [10 11 12 13 14]]

row_select2 = a[[2, 2, 2]]
print(row_select2)
# [[20 21 22 23 24]
#  [20 21 22 23 24]
#  [20 21 22 23 24]]

シェア

関連カテゴリー

Python NumPy

Python, NumPyで行列の演算(逆行列、行列式、固有値など) NumPy配列の行・列ごとの合計、平均、最大、最小などを算出 NumPyで全要素を同じ値で初期化した配列ndarrayを生成 『Python Data Science Handbook』(英語の無料オンライン版あり) Pythonでメソッドチェーンを改行して書く Python, NumPyでグラデーション画像を生成 NumPy, randomで様々な種類の乱数の配列を生成 pandas.DataFrame, SeriesとNumPy配列ndarrayを相互に変換 NumPyのバージョンを確認(np.version) NumPy配列ndarrayを分割(split, array_split, hsplit, vsplit, dsplit) NumPyで空の配列ndarrayを生成するemptyとempty_like NumPy配列ndarrayを任意の最小値・最大値に収めるclip NumPy配列ndarrayの次元をEllipsis(...)で省略して指定 NumPy配列ndarrayから条件を満たす要素・行・列を抽出、削除 NumPyのデータ型dtype一覧とastypeによる変換(キャスト)

Last Updated: 6/26/2019, 10:34:03 PM