Pythonで一定の規則を持つ配列(リスト)を生成する
Pythonにて、一定の規則に基づいた配列(list)を簡単に生成する方法のTipsです。
同じ値が繰り返される配列
例えば、「5」が10回繰り返される配列を作りたい場合は、以下のように書けます。
1 2 |
lst = [5]*10 print(lst) |
1 |
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5] |
10個くらいなら頑張れば書けなくもないですが、1000個や10000個といった長さの配列でもすぐ書けるので便利です。
任意の配列の値が繰り返される配列
上と同じようにすれば、一定のリズムを繰り返す配列もすぐに定義できます。
1 2 |
lst = [0,1,2]*5 print(lst) |
1 |
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] |
このあたりは非常にシンプルです。
等間隔の値が入った配列の生成
1,2,3…や、5,10,15…といったように、等間隔(等差数列)になっている配列を作りたい場合があります。
それにはnumpyに便利なメソッドが用意されており、それを使えば一瞬です。
下限、上限、間隔の大きさを指定
numpyのarangeメソッドを使います。
1 2 |
lst = np.arange(5, 10, 2) print(lst) |
1 |
[5 7 9] |
arange(a,b,c)と書くと、「aからb未満まで、間隔cの配列を作る」という意味になります。
小数やマイナスの値にも使えます。
下限、上限、要素数を指定
numpyのlinspaceメソッドを使います。
1 2 |
lst = np.linspace(0, 12, 4) print(lst) |
1 |
[ 0. 4. 8. 12.] |
linspace(a,b,c)と書くと、「aからbまでの、等間隔のc個の配列を作る」という意味になります。
配列の要素を全てn回ずつ繰り返す配列の生成
言葉にするとややこしいのですが、[1,1,2,2,3,3,4,4,…]や、[2,2,2,4,4,4,6,6,6,…]といった配列です。
それ専用の関数は見当たらなかったのですが、以下のようにすれば生成できます。
1 2 |
lst = np.ravel([[i]*3 for i in [1,10,100]]) print(lst) |
1 |
[ 1 1 1 10 10 10 100 100 100] |
指定のリストを要素ごとにn回繰り返すという処理になっています。
ただ、この書き方だと[[1,1,1],[10,10,10],[100,100,100]]という2次元配列になってしまうので、numpyのravelメソッドにて1次元配列に戻しています。
等差数列の値をn回ずつ繰り返したものを作りたいなら、上の書き方を応用すれば・・・
1 2 |
lst = np.ravel([[i]*4 for i in range(3,10,2)]) print(lst) |
1 |
[3 3 3 3 5 5 5 5 7 7 7 7 9 9 9 9] |
このような配列も1行で生成できます。
以上です。