アリス-データ分析(3)

40098 ワード

Numpy


モジュールのインストール

----console-----
pip install numpy
import numpy as np

np.arangeとnp。linspace

print(np.arange(0,10,3,dtype=float))
print(np.linspace(0,1,5))
[0. 3. 6. 9.]
[0.   0.25 0.5  0.75 1.  ]

アレイの作成


デフォルトではnumpyが提供する演算は並列処理されるため、配列を事前に作成して必要な演算を行うと高速になります.
print(np.array([x**2 for x in range(10)]))  #제일느림
print(np.array([x for x in range(10)])**2)  #중간
print(np.arange(100)**2)    #가장빠름(np.array은 병렬처리를 제공
print(np.arange(10))
[ 0  1  4  9 16 25 36 49 64 81]
[ 0  1  4  9 16 25 36 49 64 81]
[   0    1    4    9   16   25   36   49   64   81  100  121  144  169
  196  225  256  289  324  361  400  441  484  529  576  625  676  729
  784  841  900  961 1024 1089 1156 1225 1296 1369 1444 1521 1600 1681
 1764 1849 1936 2025 2116 2209 2304 2401 2500 2601 2704 2809 2916 3025
 3136 3249 3364 3481 3600 3721 3844 3969 4096 4225 4356 4489 4624 4761
 4900 5041 5184 5329 5476 5625 5776 5929 6084 6241 6400 6561 6724 6889
 7056 7225 7396 7569 7744 7921 8100 8281 8464 8649 8836 9025 9216 9409
 9604 9801]
[0 1 2 3 4 5 6 7 8 9]

2 Dアレイ


通常は、1次元配列:vector 2次元配列:matrixとも表すことができます.
array_1d=np.array([3,33,333])
array_2d=np.array([[1,2,3],[4,5,6]])
print(array_1d)
print(array_2d)
[  3  33 333]
[[1 2 3]
 [4 5 6]]

np.zeros()


デフォルトでは0.0というfloat 64インチが返されますが、dtypeを指定して必要なデータ型として保存したり、astypeという名前のメソッドを後で変更したりすることができます.
zero_array_2d=np.zeros((2,2))
print(zero_array_2d,zero_array_2d.dtype)
zero_array_2d=np.zeros((2,2),dtype=np.int64)
print(zero_array_2d,zero_array_2d.dtype)
print(type(zero_array_2d))
print(zero_array_2d.shape)
[[0. 0.]
 [0. 0.]] float64
[[0 0]
 [0 0]] int64
<class 'numpy.ndarray'>
(2, 2)

np.full()


後で配列を追加するとcastingが自動的に行われ、優先度の高いデータ型を変換して演算されます.
full_array1=np.full((2,2),9.0)
print(full_array1,full_array1.dtype)
full_array2=np.ones((2,2))*9 
print(full_array2,full_array2.dtype)
[[9. 9.]
 [9. 9.]] float64
[[9. 9.]
 [9. 9.]] float64

np.ones()


2番目のパラメータにdtype=を追加すると、デフォルトではfloat 64のデータ型に変更できます.
print(np.ones((2,2),dtype=np.int64))
[[1 1]
 [1 1]]

np.eye()


必要なサイズの単位行列を生成します.
eye_array=np.eye(2,2,dtype=np.int64)
print(eye_array)
eye_array=np.eye(2,4,dtype=np.int64)
print(eye_array)
[[1 0]
 [0 1]]
[[1 0 0 0]
 [0 1 0 0]]

np.random.random()


基本型float 64のランダム要素の配列を作成!
random_array=np.random.random((2,2))
print(random_array)
print(np.random.randint(0,10,(2,2)))
[[0.53665058 0.19928855]
 [0.38952037 0.12506075]]
[[7 1]
 [6 5]]

np.arang()とarray。reshape()


アレイは特定のシェイプに再生できますが、全長は同じでなければなりません.
array1=np.arange(8)
array2=array1.reshape((2,4))
array3=array2.reshape((4,2,1))
print(array1)
print(array2)
print(array3)
[0 1 2 3 4 5 6 7]
[[0 1 2 3]
 [4 5 6 7]]
[[[0]
  [1]]

 [[2]
  [3]]

 [[4]
  [5]]

 [[6]
  [7]]]

配列の演算


一般的な演算はスカラー演算(同じ位置の要素間)です.
array1=np.arange(4).reshape((2,2))
array2=np.arange(4).reshape((2,2))
print(array1+array2)
print(array1*array2)
[[0 2]
 [4 6]]
[[0 1]
 [4 9]]

array.astype()


astype()メソッドは、インフレではなく新しいアレイを作成して返します.
array=np.zeros((3,3))
araray2=array.astype(np.int64)
print(array,array.dtype)
print(array2,array2.dtype)
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]] float64
[[0 0 0]
 [0 0 0]
 [0 0 0]] int64

配列インデックス

array=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(array.shape)
array1=array[:2,1:3]
print(array1)
array2=array[1:3,:]
print(array2)
print(array[0][2])
(3, 4)
[[2 3]
 [6 7]]
[[ 5  6  7  8]
 [ 9 10 11 12]]
3

スカラー乗算とマトリクス乗算


通常の*にスカラーを乗算するとdot()メソッドによりマトリクスを乗算します.
array1=np.array([[1,2],[3,4]],dtype=np.int64)
array2=np.array([[1,2],[3,4]],dtype=np.float64)
print(array1,array2)
print(array1*array2)
print(np.dot(array1,array2))
[[1 2]
 [3 4]] [[1. 2.]
 [3. 4.]]
<class 'numpy.ndarray'>
[[ 1.  4.]
 [ 9. 16.]]
[[ 7. 10.]
 [15. 22.]]

集約関数


各演算はaxisという属性で必要な軸に計算され、標準フォーマットになります.
x=np.arange(8).reshape((2,4))
print(np.sum(x,axis=0))
print(np.min(x))
print(np.max(x))
print(np.mean(x))
[ 4  6  8 10]
0
7
3.5

masking


同じ場所の要素にboolデータを追加すると、実際の要素だけが1次元配列に抽出されます.
mask=np.eye(3,dtype=bool)
print(mask)
print()
a=np.arange(9).reshape(3,3)
print(a) 
print(a[mask])
[[ True False False]
 [False  True False]
 [False False  True]]

[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 4 8]

np.カスケードとnp。split


一般に、axis=0はy軸、axis=1はx軸である.
array=np.arange(4).reshape(2,2)
print(np.concatenate([array,array],axis=1))
array=np.arange(16).reshape(4,4)
upper,lower=np.split(array,[3],axis=0)
print(upper)
print(lower)
[[0 1 0 1]
 [2 3 2 3]]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[12 13 14 15]]

じょうけんしきマスク


条件式を使用してbool配列を生成すると、条件がtrueの要素のみがデータを挿入できます.
array=np.arange(40).reshape(10,4)+2
print(array)
print((array>15))
print(array[(array>15)])
array[(array>15)]+=100
print(array)
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]
 [14 15 16 17]
 [18 19 20 21]
 [22 23 24 25]
 [26 27 28 29]
 [30 31 32 33]
 [34 35 36 37]
 [38 39 40 41]]
[[False False False False]
 [False False False False]
 [False False False False]
 [False False  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
 40 41]
[[  2   3   4   5]
 [  6   7   8   9]
 [ 10  11  12  13]
 [ 14  15 116 117]
 [118 119 120 121]
 [122 123 124 125]
 [126 127 128 129]
 [130 131 132 133]
 [134 135 136 137]
 [138 139 140 141]]

np.where


np.where(条件)は、条件を満たす要素の位置を2次元配列、npに返します.where(条件、パラメータ1、パラメータ2)は、条件が真偽の場合に返すパラメータを設定することで新しい配列を返しますが、2 D配列では2 D配列インデックスを使用できます.
array=np.arange(40).reshape(10,4)+2
print(np.where(array>15))
print(array[np.where(array>15)])
print(np.where(array>15,array,0))
print(array)
print(array[[4,4,4,4],[0,1,2,3]])
(array([3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
       9, 9, 9, 9], dtype=int64), array([2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,
       0, 1, 2, 3], dtype=int64))
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
 40 41]
[[ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0  0  0]
 [ 0  0 16 17]
 [18 19 20 21]
 [22 23 24 25]
 [26 27 28 29]
 [30 31 32 33]
 [34 35 36 37]
 [38 39 40 41]]
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]
 [14 15 16 17]
 [18 19 20 21]
 [22 23 24 25]
 [26 27 28 29]
 [30 31 32 33]
 [34 35 36 37]
 [38 39 40 41]]
[18 19 20 21]

ブロードキャスト


追加された配列形式が異なっていても、列が同じであれば演算をブロードキャストできます!
array1=np.arange(9).reshape(3,3)
print(array1)
array2=np.zeros((5,5))
print(array2)
array2[:]=[0,1,2,3,4]
print(array2)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
[[0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]]
*print(np.full((5, 5), np.arange(5)で表すこともできます