ベース6-numpy
今回のリリースでは、Pythonの科学処理パッケージnumpyに関する内容と方法をまとめました.
なぜnumpyを使うのですか?は、非常に大きなマトリクス処理と複数の演算機能 を提供する.は、文を繰り返すことなくデータアレイ を処理する.は、線形代数に関連する多くの機能 を提供する. pythonはinterpriter言語であるため、リストは処理速度が遅いという欠点を補うことができる. なぜスピードが速いのか
1,numpyはC言語で実現されている
2、numpyは1つのタスクをサブタスクとして並列処理する
3、メモリアクセス方式によって速度が速い(メモリにはアドレス値ではなく実際の値が格納されているため、メモリの値は連続的に格納されているため、速度が速い).
ソース
https://checkwhoiam.tistory.com/94
と一般リストの違い numpyは、1つのデータ型のみを配列(ダイナミックタイプはサポートされていない) に入れることができる. C言語のArrayを使用してアレイ を作成 numpyメモリ構造
ソース
https://www.slideshare.net/enthought/numpy-talk-at-siam
fi番号宣言とインデックスは に近い.のメモリ直接値を超えるため、同じ整数値でもlistとは異なる結果が「is」構文で生成されます. データ形状タイプ 0次元:スカラー(7) 次元:ベクトル([1,1]) 二次元:行列([1,1],[2,2]) 三次元:3‐テンソル([[1,2,3],[4,5,6],[7,8,9],[10,11,12]) ] n次元:n-テンソル 形状:戻り次元、dtype:戻りデータ型 ndim:次元数、size:データ量 nbyte:ndarrayオブジェクトのメモリサイズは を返します.
C言語のデータ型との互換性
ソース
https://kongdols-room.tistory.com/53リモデリング:Arrayシェイプのサイズを変更し、要素の数は同じ です.扁平化:多次元配列を1次元配列に変換する [0,0]記号使用可能-listとの違い
より柔軟なスライド
ソース
https://www.slideshare.net/PyData/introduction-to-numpy
規格の生成には、さまざまな柔軟な方法があります. arange:値リストを生成するコマンド 、範囲指定用零点:0を満たす仕様 を作成する ones:1の生成 empty:形状のみが空の仕様(出力値がゴミ値) を生成する. something like:既存のカレンダーのシェイプを埋めるために0または1の値を返します. zeros like:0は を返します. ones like:塗りつぶし1は を返します.
identity:単位行列 を作成する
個目:対角線が1のマトリクス、kパラメータを使用して1の開始インデックスを変更し、行と列数は を指定できます. diag:対角行列の取値
random sampling
均一(Uniform):均一分布に基づく乱数を作成するには
normal:正規分布を生成する整数
指数:指数分布を生成する乱数
sum:endarrayの要素間の関数
axisを用いて基点を持って和を求めることができる.
行列の場合
axis=0:行ベース
axis=1:カラムベース
テンソルの場合
個人的なテクニック
3−テンソル形状が(a,b,c)の場合、aixs=0はaを削除する(b,c)形状、aixs=1はbを削除する(a,c)形状、aixs=2はcを削除する(a,b)形状である.マトリクスも同様にshapeが(a,b)の場合、aixs=0はaを削除する(b,)形状であり、aixs=1はbを削除する(a,)形状であるべきである.
平均値:,std:標準偏差,sqrt:平方根,exp:指数
このほかにも、 という多くの数学関数があります.
カスケード:numpy arrayをマージする関数
カスケードを軸としてマトリクスをマージできます.次元を追加する2つの方法
1, reshape()
2, np.newaxis
は基本的な4則演算 をサポートする.行列の乗点関数または"@"は を使用します.フロントマトリクス ブロードキャスト:異なるシェイプアレイ間の演算をサポートします. timeit:jupyter環境でコードのパフォーマンスをチェックする関数
(通常速度はfor loop any:要素の一部が真の場合は真を返します.all:すべての要素が真の場合は真 を返します.カレンダray間の比較可能:ブール型データを返すカレンダ where:条件を満たす値またはインデックス を返します. argmax,argmin:配列内の最大値または最小値を返すインデックス argsort:数値をソートし、対応するインデックス を抽出する. boolean index:特定の条件に従って配列形式で値 を抽出するフラワーインデックス:arrayをインデックス値として使用して を抽出
np.loadtxt(ファイルを読み込む)、
np.savetxt(ファイルを保存)、
np.numpyオブジェクトの保存-npyファイルを使用します.
np.load(numpyオブジェクト読み出し-npyファイル)などの関数が存在する
(npyファイル-pickle(オブジェクトストレージ)と同じストレージフォーマット)
Naver BoostCap AI技術と課程
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F
https://checkwhoiam.tistory.com/94
https://codetorial.net/articles/exponential_distribution.html
numpy
なぜnumpyを使うのですか?
1,numpyはC言語で実現されている
2、numpyは1つのタスクをサブタスクとして並列処理する
3、メモリアクセス方式によって速度が速い(メモリにはアドレス値ではなく実際の値が格納されているため、メモリの値は連続的に格納されているため、速度が速い).
ソース
https://checkwhoiam.tistory.com/94
ソース
https://www.slideshare.net/enthought/numpy-talk-at-siam
numpyの使い方と特性
# 넘파이는 하나의 데이터 타입만 배열에 넣을 수 있음(dynamic typing 지원하지 않음)
m = np.array([1,2,3,4], float)
print(m)
print(m[2]) #3출력
#실수형변환이 가능한 것은 변환이 되어 배열 생성
a = np.array(['1','2',3,4], float)
print(a)
print(type(a[0]))
a = [1,2,3,4,5]
b = [1,2,3,4,5]
print(a[0] is b[0]) #True
a = np.array(a)
b = np.array(b)
print(a[0] is b[0]) # False
handling shape
#scalar
t_arr = np.array([1,2,3,4], float)
print(t_arr.dtype) #float64
print(t_arr.shape) #(4,)
#matrix
t_arr = np.array([[1,2,3],[4,5,6]], float)
print(t_arr.shape) #(2,3)
#3-tensor
t_arr = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]], float)
print(t_arr.shape) #(2,2,3)
t_arr = np.array([[1,2,3],[4,5,6],[4,5,6]], float)
print(t_arr.ndim) #2 (2차원)
print(t_arr.size) #9 (데이터의 갯수)
t_arr = np.array([1,2,3,4], dtype = np.float32) # 32비트로 2진수로 표현
print(type(t_arr[0]))
t_arr = np.array([1,2,3,4], dtype = np.float64) # 64비트로 2진수로 표현
print(type(t_arr[0]))
t_arr = np.array([1,2,3,4], dtype = np.int)
print(type(t_arr[0]))
t_arr = np.array([1,2,3,4], dtype = np.float32)
print(t_arr.nbytes) #16 (4*4)
t_arr = np.array([1,2,3,4], dtype = np.float64)
print(t_arr.nbytes) #32 (8*4)
t_arr = np.array([1,2,3,4], dtype = np.int8)
print(t_arr.nbytes) #4 (1*4)
t_arr = np.array([1], dtype = np.int8) #얼마만큼 메모리 사용하고 있는지(int8은 1바이트)
print(t_arr.nbytes) #1 (1*1)
C言語のデータ型との互換性
ソース
https://kongdols-room.tistory.com/53
t_matrix = [[1, 2, 3], [4,5,6]]
np.array(t_matrix).shape
np.array(t_matrix).reshape(3, 2) # 형변환 가능
#-1 : size 기반으로 크기를 알아서 선정해서 reshape해준다.
t_matrix = [[1, 2, 3], [4,5,6]]
print(np.array(t_matrix).reshape(-1, 2)) # 자체 내용이 바뀌지는 않고 return
print("=============")
print(np.array(t_matrix).reshape(3,-1))
print("=============")
print(test_matrix)
t_matrix = [[1, 2, 3,4], [5,6,7,8]]
print("=============")
print(np.array(t_matrix).reshape(1,-1,2))
print(np.array(t_matrix).reshape(1,-1,2).shape)
test_matrix = np.array([[1, 2, 3,4], [5,6,7,8]])
print(test_matrix.flatten()) #[1 2 3 4 5 6 7 8]
print(test_matrix.flatten().shape) #(8,)
print(test_matrix.flatten().size) #8
indexing & slicing
より柔軟なスライド
a = np.array([[1,2,3], [4.1,5.1,6.1]], int)
print(a[0,0]) # 1
print(a[0][0]) # 1
# ndarray 값 변환 가능
a[0,0] = 11
a = np.array([[1,2,3], [4,5,6]], int)
print(a[:,2:])
print("===========")
print(a[:,-1]) #마지막 행 추출
print("===========")
print(a[1,1:3])
print("===========")
print(a[1:3])
ソース
https://www.slideshare.net/PyData/introduction-to-numpy
create function
print(np.arange(10))
print(np.arange(0,10,0.6))
print(np.arange(10).reshape(2,5))
print(np.zeros(shape=(10,),dtype = np.int8))
print(np.zeros((2,5)))
print(np.ones(shape = (10,), dtype = np.int8))
print(np.ones((2,5)))
print(np.empty(shape=(20,), dtype=np.int8))
print(np.empty((5, 5)))
t_matrix = np.arange(30).reshape(5,6)
print(np.ones_like(t_matrix,float))
print(np.zeros_like(t_matrix,float))
print(np.ones_like(t_matrix,int))
print(np.zeros_like(t_matrix,int))
np.identity(n=3, dtype=np.int8)
np.identity(4)
print(np.eye(3))
print(np.eye(3,5,k=2))#k는 1의 시작 행을 정함
print(np.eye(N=3, M=5, dtype = np.int8))
m = np.arange(9).reshape(3,3)
print(m)
print("========")
print(np.diag(m))
print(m)
print("========")
np.diag(m, k =1)
print(m)
print("========")
np.diag(m, k =0)
print(m)
print("========")
np.diag(m, k =-1)
random sampling
均一(Uniform):均一分布に基づく乱数を作成するには
normal:正規分布を生成する整数
指数:指数分布を生成する乱数
np.random.uniform(0,1,10).reshape(3,2) #균등분포
np.random.normal(0,1,6).reshape(3,2) # 정규분포
np.random.exponential(scale = 3, size = 10) #지수분포
operation function
axisを用いて基点を持って和を求めることができる.
a = np.arange(11)
print(a.sum())
print(a.sum(dtype = np.float64))
行列の場合
axis=0:行ベース
axis=1:カラムベース
a = np.arange(1,11).reshape(2,5)
print(a)
print(a.sum(axis = 0))
print(a.sum(axis = 1))
テンソルの場合
a = np.arange(1,21).reshape(2,5,2)
print(a)
print(a.sum(axis = 0)) #(5,2)
print("=========")
print(a.sum(axis = 1)) #(2,2)
print("=========")
print(a.sum(axis = 2)) #(2,5)
個人的なテクニック
3−テンソル形状が(a,b,c)の場合、aixs=0はaを削除する(b,c)形状、aixs=1はbを削除する(a,c)形状、aixs=2はcを削除する(a,b)形状である.マトリクスも同様にshapeが(a,b)の場合、aixs=0はaを削除する(b,)形状であり、aixs=1はbを削除する(a,)形状であるべきである.
平均値:
このほかにも、
m = np.arange(10).reshape(2,5)
print(m)
print(m.mean())
print("==========")
print(m.mean(axis= 0))
print("==========")
print(m.mean(axis= 1))
print(m.std())
print("==========")
print(m.std(axis= 0))
print("==========")
print(m.std(axis= 1))
print(np.sqrt(m))
print("==========")
print(np.exp(m)) #e^m
a = np.array([1,2,3])
b = np.array([2,3,4])
np.vstack((a,b)) #위에서 아래로 쌓임
a = np.array([[1],[2],[3]])
b = np.array([[2],[3],[4]])
np.hstack((a,b)) #왼쪽에서 오른쪽으로 쌓임
カスケードを軸としてマトリクスをマージできます.
a = np.array([[1,2,3]])
b = np.array([[2,3,4]])
np.concatenate((a,b),axis = 0)
a = np.array([[1,2,3]])
b = np.array([[2,3,4]])
np.concatenate((a,b),axis = 1)
a = np.array([[1,2], [3,4]])
b = np.array([[5,6]])
np.concatenate((a,b.T),axis = 1)
1, reshape()
2, np.newaxis
a = np.array([[1,2], [3,4]])
b = np.array([5,6])
#축을 추가하는 2방법
#1, b.reshape(-1,2)
#2, b = b[np.newaxis,:]
b = b[np.newaxis,:]
np.concatenate((a,b.T),axis = 1)
array operation
a = np.array([[1,2,3], [4,5,6]], float)
b = np.array([[1,2,3], [4,5,6]], float)
print(a + b)
print(a - b)
print(a * b)
a = np.array([[1,2,3], [4,5,6]], float)
b = np.array([[1,2], [4,5],[5,6]], float)
print(a.dot(b))
print(a @ b)
a = np.arange(10).reshape(2,5)
print(a)
print("=========")
print(a.T)
a = np.arange(20).reshape(2,5,2)
print(a)
print("=========")
print(a.T)
m = np.array([[1,2,3], [4,5,6]], float)
scalar = 2
print(m + scalar)
print("============")
print(m - scalar)
print("============")
print(m * scalar)
print("============")
print(m / scalar)
a = np.array([[1,2,3], [4,5,6], [7,8,9]],int)
b = np.array([10,11,12], int)
print(a + b)
print("============")
print(a - b)
print("============")
print(a * b)
print("============")
print(a / b)
(通常速度はfor loop
%timeit [scalar * value for value in range(1000000)]
%timeit np.arange(1000000) * scalar
comparisions
a = np.arange(10)
# array([ True, True, True, True, False, False, False, False, False,
# False])
a < 4
# array([ True, False, False, False, False, False, False, False, False,
# False])
a < 1
np.all(a < 10) #True
np.all(a < 5) # False
np.any(a < 5) # True
np.any(a > 11) # False
a = np.array([1,2,3], float)
b = np.array([4,5,-1], float)
# array([False, False, True])
a > b
print((a > b).any()) # True
print((a > b).all()) # False
a = np.array([1,2,3], float)
# array([ True, True, False])
np.logical_and(a>0,a<3)
a = np.array([True,False,False], float)
# array([False, True, True])
np.logical_not(a)
c = np.array([False,False,True], float)
# array([ True, False, True])
np.logical_or(a,c)
a = np.array([1,2,3], float)
# array([2, 2, 3]) <조건에 맞는 값 반환>
np.where(a>2,3,2)
a = np.arange(10)
# (array([6, 7, 8, 9]),) <인덱스 반환>
np.where(a>5)
a = np.array([1,np.NaN,np.Inf], float)
# array([False, True, False])
np.isnan(a)# Not a Number
# array([ True, False, False])
np.isfinite(a) # is finite number(유한한 수인가? , 머신러닝 할 경우 발산하는 값을 걸러낼 때 주로 사용)
a = np.array([1,2,3,4,5,6,7,8,9])
print(np.argmax(a)) # 8
print(np.argmin(a)) # 0
a = np.array([[1,7,32],[43,1,4]])
print(np.argmax(a,axis = 1)) # [2 0]
print(np.argmin(a,axis = 0)) # [0 1 1]
a = np.array([1,2,5,6,7,8,9,4,2,1])
# array([0, 9, 1, 8, 7, 2, 3, 4, 5, 6])
a.argsort()
boolean index & fancy index
a = np.array([1,2,5,6,7,8,9,4,2,1])
# array([False, False, True, True, True, True, True, True, False,
# False])
a > 3
condition = a < 3 #조건은 판단하는 ndarray shape와 동일
a[condition] # array([1, 2, 2, 1])
a = np.array([2,4,6,8],float)
b = np.array([0,0,1,3,2,1],int) # 반드시 integer로 선언(shape이 같은 필요는 없음)
a[b] #array([2., 2., 4., 8., 6., 4.])
a.take(b) #take 함수 : fancy index와 같은 효과
a = np.array([[1,2], [3,4]], float)
b = np.array([0,1,1,1,0], int)
c = np.array([0,1,1,0,1], int)
print(a)
print("=========")
print(a[b,c])
print("=========")
print(a[b])
ファイルI/O
np.savetxt(ファイルを保存)、
np.numpyオブジェクトの保存-npyファイルを使用します.
np.load(numpyオブジェクト読み出し-npyファイル)などの関数が存在する
(npyファイル-pickle(オブジェクトストレージ)と同じストレージフォーマット)
Reference
Naver BoostCap AI技術と課程
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F
https://checkwhoiam.tistory.com/94
https://codetorial.net/articles/exponential_distribution.html
Reference
この問題について(ベース6-numpy), 我々は、より多くの情報をここで見つけました https://velog.io/@ganta/파이썬-기초6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol