LoginSignup
0
0

それ,numpy で書かない?--9--

Posted at

それ,numpy で書かない?--9--

ただでさえ遅い選択ソート。
リストでやると Numpy ndarray でやるより 100 倍以上遅い。argmin を使って余計な for ループも使わずに済む。

import random

# random.randint(1, 9)で1〜9の数値を生成、for文で80000回実行
numbers = [random.randint(1, 9) for _ in range(80000)]
from time import time
def select_sort(data: list[int]) -> list[int]:
    len_data = len(data) # 配列の長さ
    for i in range(len_data): # リストの各位置に対して最小値を見つけ、その位置と交換するため
        min_index = i # 初期値
        for j in range(i + 1, len_data): # iより後ろの要素の中から最小値を見つけるため
            if data[j] < data[min_index]:
                min_index = j
        data[i], data[min_index] = data[min_index], data[i]

data = numbers.copy()
s = time()
select_sort(data)
print(time() - s)
80.99239301681519
import numpy as np

def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = np.argmin(arr[i:])
        arr[i], arr[i+min_idx] = arr[i+min_idx], arr[i]

data2 = np.array(numbers.copy())
s = time()
selection_sort(data2)
print(time() - s)
0.7172000408172607
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0