配列を生成するための最速の方法

Fastest way to populate an array? – StackOverflow

Fastest wayを考えるなら,普通にループさせてCythonizeする場合,Numbaを用いる場合も検討するべきだが,非常に単純なのでNumpyでも十分に高速.最初にゼロ埋めのアレイを作れば,「N//2:」の処理は不要.

def populate_lst(N):
    return [1 if i in (0, N//2) else 2 if 0<i<N//2 else 0 for i in range(N)]


def populate_arr(N, dtype='u1'):
    out = np.zeros(N, dtype=dtype)
    out[[0, N//2]] = 1
    out[1:N//2] = 2
    return out


N = 10
populate_lst(N), populate_arr(N)
([1, 2, 2, 2, 2, 1, 0, 0, 0, 0],
 array([1, 2, 2, 2, 2, 1, 0, 0, 0, 0], dtype=uint8))
%timeit populate_lst(1_000_000)
%timeit populate_arr(1_000_000)
1 loop, best of 3: 274 ms per loop
10000 loops, best of 3: 185 µs per loop
広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください