numpy.ndarrayの操作はarray[i, j]の方がarray[i][j]より速い(筈)

「numpy.ndarrayの操作はarray[i, j]の方がarray[i][j]より速い」とドキュメントに書いてあって(或いはStackOverflowでみたんだったか),そうなんだと思って使っていたけど,以前array[i][j]の方が速いケースに出くわしたので再度確認.

a = np.arange(1000, dtype=np.int64) * np.arange(1000, dtype=np.int64)[:, np.newaxis]
%%timeit
res = 0
for i in range(1000):
    for j in range(1000):
        res += a[i][j]
res

616 ms ± 19 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%%timeit
res = 0
for i in range(1000):
    for j in range(1000):
        res += a[i, j]
res

336 ms ± 19.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

a = np.zeros((1000, 1000))
%%timeit
for i in range(1000):
    for j in range(1000):
        a[i][j] = i + j

541 ms ± 29.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%%timeit
for i in range(1000):
    for j in range(1000):
        a[i, j] = i + j

312 ms ± 26.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

やっぱり,numpy.ndarray[i, j]の方が速い.

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中