python

しょっちゅう忘れることを書いておく。

66

1249 views

特定の列でソートするコードの解説

以下のコードでは、argsortを使用して2次元配列の特定の列に基づいて行をソートしています。

# coding:UTF-8
import numpy as np

if __name__ == '__main__':
    # ランダムな5x6の2次元配列を生成
    data = np.random.randn(5, 6)
    print(data)

    # ソートの基準となる列番号を指定(ここでは4列目)
    col_num = 4

    # 指定した列の値を表示
    print(data[:, col_num])

    # argsortを使って列のインデックスを取得(小さい順に並ぶ)
    col = np.argsort(data[:, col_num])
    print(col)

    # 取得したインデックスを使って行全体を並び替える
    sorted_col = data[np.argsort(data[:, col_num])]
    print(sorted_col)

コードの解説

  1. ランダム配列生成

    • np.random.randn(5, 6)で5行6列のランダムな数値からなる配列 (data) を作成しています。
  2. ソート基準の列を選択

    • col_num = 4で、ソートの基準となる列を指定します。ここでは5列目(インデックスでいうと4列目)です。
  3. 指定列のデータ表示

    • data[:, col_num]を使って、選択した列の値だけを表示しています。:は全行を意味します。
  4. argsortによるインデックスの取得

    • np.argsort(data[:, col_num])は、指定した列の値を基に、小さい順にインデックスを並べた配列を返します。この結果がどの行が並び替えられるべきかを示します。
  5. インデックスを使ったソート

    • data[np.argsort(data[:, col_num])]で、取得したインデックス順にdata全体の行を並べ替えます。これにより、指定した列の値に基づいて行全体が昇順に並び替えられます。

実行結果の解説

実行結果は、配列全体、ソート対象の列の値、argsortの結果、そして並び替え後の配列が順に表示されます。

例の出力

  • 元のデータ例:

    [[-0.14016536  0.21551254  0.24784852  0.59144645  0.32235863  0.67189879]
     [-0.1197581   0.34133468  0.89260091 -1.09935213  1.52181822  0.01690957]
     [-0.88335896 -0.72368754 -0.87826505  2.48254012 -0.62577154  1.82120588]
     [ 0.46286874  1.74054554  1.21514558  0.520769    1.01164945 -0.57376935]
     [-2.14264006 -0.36363893  1.18613253  0.04081303 -0.22348603 -0.26786658]]
    
  • ソート対象の列:

    [ 0.32235863  1.52181822 -0.62577154  1.01164945 -0.22348603]
    
  • ソート後の結果:

    [[-0.88335896 -0.72368754 -0.87826505  2.48254012 -0.62577154  1.82120588]
     [-2.14264006 -0.36363893  1.18613253  0.04081303 -0.22348603 -0.26786658]
     [-0.14016536  0.21551254  0.24784852  0.59144645  0.32235863  0.67189879]
     [ 0.46286874  1.74054554  1.21514558  0.520769    1.01164945 -0.57376935]
     [-0.1197581   0.34133468  0.89260091 -1.09935213  1.52181822  0.01690957]]
    

上記のように、ソート対象の列を基準にして全行が並べ替えられています。

2次元配列の行をランダムに入れ替える

参照リンクの方法を用いて、2次元配列の行をランダムにシャッフルするには以下のコードを使います。

data = np.random.randn(5, 6)
print("Before shuffle:\n", data)

# 行の順序をランダムに入れ替える
np.random.shuffle(data)
print("After shuffle:\n", data)

np.random.shuffleを使うと、元の配列の行順序がランダムに変更されます。

Page 2 of 69.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626