#CP pythonでのnumpyに関するメモ
10^7とかになるとpythonではatcoderの2s制限にひっかかってくるので、高速化のためにリストではなく、numpyの配列を使うようにしたいわけです。
ということで必要最低限のnumpyの使い方について自分用にまとめておきます。今後追加するかも。
# NumPyモジュールをインポート import numpy as np # リストの配列化 a1 = np.array([1,1,4,5,1,4]) print(a1) # [1 1 4 5 1 4] # 全ての要素が0の要素数nの配列を生成 n = 5 a2 = np.zeros(n,dtype=np.int) #dtypeを指定しないとfloatになるっぽい print(a2) # 配列の長さを取得 l1 = len(a1) print(l1) # 6 # 配列の要素の取得 for i in range(l1): print(a1[i], "", end="") # 1 1 4 5 1 4 print() #改行 # 配列のスライス print(a1[0:3]) # [1 1 4] # 配列同士の四則演算(for文より早いらしい) # リストでやると"連結"になるので注意 a3 = np.array([1,9,1,9,1,9]) print(a1+a3) # [ 2 10 5 14 2 13] print(a1-a3) # [ 0 -8 3 -4 0 -5] print(a1*a3) # [ 1 9 4 45 1 36] print(a1//a3) # [1 0 4 0 1 0] # ある数値との四則演算も可能 print(3+a1) # [4 4 7 8 4 7] print(3-a1) # [ 2 2 -1 -2 2 -1] print(3*a1) # [ 3 3 12 15 3 12] print(3//a1) # [3 3 0 0 3 0] # 配列の連結(リストにおけるextendと同様の挙動) # 配列なのでコピーが発生→遅いらしい a4 = np.append(a1,a3) print(a4) # [1 1 4 5 1 4 1 9 1 9 1 9] # 多次元配列に変換 a5 = a2.reshape(5,1) print(a5) # [[0] # [0] # [0] # [0] # [0]]
まとめ
リスト型はlist, 配列型はarrと表記
- listの配列化 : np.array(list)
- 要素数nの0(整数)だけの配列の生成 : np.zeros(n, dtype=np.int)
- 長さの取得 : len(arr)
- indexがiの要素の取得 : arr[i]
- 配列のスライス(リストと同じ): arr[x:y]
- 配列同士の演算 : arr1 op arr2
- 数値と配列の演算 : x op arr
- 配列の連結 : np.append(arr1, arr2)
- 多次元配列(x行y列)への変換 : arr.reshape(x,y)