NumPyのndarray その1
今までデータの格納については、
PandasのSeriesやDataFrameのまとめをやりましたが、
NumPyというもあるので、こちらもまとめていきたいと思います。
Numpyってなに?
- n次元配列のオブジェクトndarrayがある。
- 高速計算が可能
- 配列ベースで計算が可能
- データ分析に適している
らしいです。
下準備
今回はNumPyを使います。
NumPyは標準モジュールではないので、インストールが必要です。
コマンドプロンプトでインストールする場合
pip install numpy
ndarrayで1次元配列〜3次元配列まで実際に作ってみよう
- 1次元配列を作ってみよう
# NumPyをインポートします。 import numpy as np data = [1,2,3,4,5] a = np.array(data) print(a)
結果:
[1 2 3 4 5]
1次元配列が出来上がりました。
- 2次元配列を作ってみよう
# NumPyをインポートします。 import numpy as np data2 = [[1,2,3,4,5],[2,4,6,8,10]] a2 = np.array(data2) print(a2)
結果:
[[ 1 2 3 4 5]
[ 2 4 6 8 10]]
2次元配列の出来上がり。
- 3次元配列に文字列をいれてみよう。
# NumPyをインポートします。 import numpy as np data3 = [[[1,2,3,4,5],[2,4,6,8,10]],[[3,6,9,12,15],[4,8,12,16,20]]] a3 = np.array(data3) print(a3)
結果:
[[[ 1 2 3 4 5]
[ 2 4 6 8 10]]
[[ 3 6 9 12 15]
[ 4 8 12 16 20]]]
3次元配列も出来上がり!
このように何次元配列でも簡単に作れてしまいます。
<最終更新日:2021/09/06>
2021/09/06 投稿
ジェネレータ式を使ってみよう
内包表記にそっくりな表記方法で ジェネレータ式というのがあります。
今日はそれについてのまとめをしていきたいと思います。
どれくらい似てるの?
例題: y = 2x + 10 (0≦x≦10) を求めてみよう
- For文で作ってみよう
y = [] for x in range(10): y.append(2 * x + 10) print(y)
- 内包表記で書いてみよう
z = [] z = [2*x+10 for x in range(10)] print(z)
- ジェネレータ式で書いてみよう
w = [] w = (2*x+10 for x in range(10)) print(list(w))
違いは見つかりましたか? 内包表記は括弧が[ ]ですが、ジェネレータ式は( )です。
内包表記とジェネレータ式って何が違うの?
内包表記 最初にすべての整数を実機に生成しようとするため、処理時間がかかるそうです。
ジェネレータ式 要求に応じてその都度整数を1つずつ生成するため、処理時間がかかりにくいそうです。
実際に負荷をかけたプログラムを実行して、時間を測ってみよう。
昨日まとめた時間を計測する方法を使ってみよう。
負荷をかけたいので、xの範囲を0以上1億以下に変更します。
- For文
import time y = [] y_b = time.perf_counter() for x in range(100000000): y.append(2 * x + 10) y_a = time.perf_counter() y_t = y_a - y_b print(y_t)
結果:14.576659613999936 s
- 内包表記
import time z = [] z_b = time.perf_counter() z = [2*x+10 for x in range(100000000)] z_a = time.perf_counter() z_t = z_a - z_b print(z_t)
結果:8.063755885000091 s
- ジェネレータ式
import time w = [] w_b = time.perf_counter() w = (2*x+10 for x in range(100000000)) w_a = time.perf_counter() w_t = w_a - w_b print(w_t)
結果:6.813899994995154e-05 s
1億回appendをさせてみたところ、結果は以下のとおり
処理方法 | かかった時間(秒) |
---|---|
For | 14.6 |
内包表記 | 8.1 |
ジェネレータ式 | 0.000068 |
このように、ジェネレータ式を使うと処理が早くなるのがわかります。
<最終更新日:2021/09/02>
2021/09/02 投稿