note.nkmk.me

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

Date: 2018-03-04 / tags: Python, NumPy

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]]

特定の列だけを抽出(選択)することもできる。重複してもOK。

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]]
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事