[Week 2]Day 6 Numpy/ベクトル/行列
57375 ワード
📒 Numpy
これはNumpyの基礎授業です.
Numpyは一度ネットで簡単に勉強したことがあります.
教授は最初から最後まで一つ一つ私を指図してくれた.
頭の中の内容を整理するのは簡単すぎる.
📝 numpy
」マトリクスとマトリクスをコードで表すにはどうすればいいですか?
✏️ Why needs?
coefficient_matrix = [[2, 2, 1], [2, -1, 2], [1, -1, 2]]
constant_vector = [9, 6, 5]
👉 適切な包装が必要です.
✏️ numpy(Numerica Python)
# 패키지 설치
activate ml
conda install numpy
# 호출
import numpy as np
✏️ ndarray
>>> test_aray = np.array([1, 4, 5, 8], float) # (리스트, 타입)
>>> print(test_array)
array([1. , 4. , 5. , 8.])
>>> type(test_array)
numpy.ndarray
>>> type(test_array[3])
numpy.float64
✏️ Array creation
>>> test_array = np.array([1, 4, 5, "8"]) # String Type의 데이터를 입력해도
>>> print(test_array)
array([1., 4., 5., 8.])
>>> print(type(test_array[3])) # Float Type으로 자동 형변환
numpy.float64
>>> print(test_array.dtype) # Array 전체의 데이터 Type을 반환
dtype('float64')
>>> print(test_array.shape) # Array의 shape를 반환 (Dimension)
(4,)
✏️ Array shape
arrayのRANKによると名前があります.
RankNameExample0scalar71vector[10, 10]2matrix[[10, 10,], [15, 15]]33-tensor[[[1, 5, 9], [2, 6, 10]], [[3, 7, 11], [4, 8, 12]]]nn-tensor
✏️ Array dtype
Cのデータ型と互換性があります.
📝 numpy2
✏️ reshape
Arrayシェイプのサイズを変更します.要素の個数は同じです.
>>> test_matrix = [[1, 2, 3, 4], [1, 2, 5, 8]]
>>> np.array(test_matrix).shape
(2, 4)
>>> np.array(test_matrix).reshape(8,)
array[1, 2, 3, 4, 1, 2, 5, 8]
✏️ Indexing
>>> a = np.array([[1, 2, 3], [4, 5, 6]], int)
>>> print(a[1, 2])
6
>>> a[0, 0] = 0
>>> print(a)
array([[0, 2, 3], [4, 5, 6]])
✏️ Slicing
>>> a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
>>> a[:, 2:] # 전체 Row의 2열 이상
array([[3, 4, 5], [8, 9, 10]])
>>> a[1, 1:3] # 1 Row의 1열 ~ 2열
array([7, 8])
>>> a[1:3] # 1Row ~ 2Row의 전체
array([6, 7, 8, 9, 10])
✏️ Creation function
np.arange(5) # List의 range와 같은 효과, integer로 0부터 4까지 배열 추출
# array([0, 1, 2, 3, 4])
np.arange(0, 3, 0.5) # (시작, 끝, step)으로, floating point도 표시 가능
# array([0., 0.5, 1., 1.5, 2, 2.5])
np.arange(4).reshape(2, 2)
# array([[0, 1], [2, 3]])
np.zeros(shape=(5,), dtype=np.int8)
# array([0, 0, 0, 0, 0], dtype = int8)
np.ones((2, 2))
# array([[1, 1], [1, 1]])
>>> np.identity(3)
array([1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
np.eye(3, 5, k = 2)
array([0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
k値が正の場合は右、負の場合は下
matrix = np.arange(9).reshape(3, 3)
np.diag(matrix)
# array([0, 4, 8])
✏️ axis
a = a[np.newaxis, :] # 값은 그대로면서, 축을 하나 늘려준다.
a.T # T를 붙여주면 행과 열을 바꿔준다.
🧤 np.何かを呼び出すことで、さまざまな数学演算子を決定できます.✏️ concatenate
✏️ array operation
numpyは配列間の基本的な4則演算をサポートします.(同じ形状でなければなりません)
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a + a
array([[2, 4, 6], [8, 10, 12]])
>>> a - a
array([[0, 0, 0], [0, 0, 0]])
>>> a * a
array([[1, 4, 9], [16, 25, 36]])
Dot Product、すなわち>>> a = np.arange(1, 7).reshape(2, 3)
>>> b = np.arange(7, 13).reshape(3, 2)
>>> a.dot(b)
array([[58, 64], [139, 154]])
📝 numpy3
✏️ Comparisons
配列サイズが同じである場合、要素間の比較結果はBoolean typeを返します.
>>> a = np.array([1, 3, 0])
>>> b = np.array([5, 2, 1])
>>> a > b
array([False, True, False], dtype=bool)
>>> (a > b).any()
True
np.where(a > 0, 3, 2) # where(condition, True, False)
np.where(a > 0) # True 값의 index들을 반환
a = np.array([1, np.Nan, np.Inf], float)
np.isnan(a) # Not a Number
np.isfinite(a) # is finite number
np.argmax(a), np.argmin(a) # 최대값, 최소값의 index를 반환함
np.argmax(a, axis = 1), np.argmin(a, axis = 0) # axis 기반의 반환
a.argsort() # 작은 값부터 index를 반환
a[a.argsort()[::-1]] # 내침차순
✏️ Boolean & fancy index
>>> a = np.array([1, 4, 0, 2, 3, 5], float)
>>> a[a > 3] # 조건이 True인 index의 element만 추출
array([4.0, 5.0])
>>> a = np.array([2, 4, 6, 8], float)
>>> b = np.array([0, 0, 1, 3, 2, 1], int) # 반드시 integer로 선언
>>> a[b] # bracket index, b 배열의 값을 index로 하여 a의 값들을 추출함.
# a.take(b) -> take 함수 : 윗 줄 문법과 같은 효과
array([2., 2., 4., 8., 6., 4.])
✏️ Numpy data I/O
テキスト型データの読み取りと格納機能
a = np.loadtxt("파일명")
a_int = a.astype(int) # int type 변환
np.savetgxt("파일명", a_int, fmt="%.2e", delimiter=",") # csv로 저장
📒 ベクトルは何ですか。
講師はUNIXの任成彬教授に変わった.
これはベクトルの数学的内容+python実現に関する講座である.
幾何学、ベクトル、または線形代数を学ぶのは長い間、新しい概念のように感じられています.
今は数学の勉强をがんばります.
📝 vector
# 1차원 벡터 예시
x = np.array([1, 7, 2]) # 행 벡터
x.T # 열 벡터
📝 ベクトル賭博
def L1_norm(x):
x_norm = np.abs(x)
x_norm = np.sum(x_norm)
return x_norm
# np.linalg.norm을 이용해도 구현할 수 있다.
def L2_norm(x):
x_norm = x * x
x_norm = np.sum(x_norm)
x_norm = np.sqrt(x_norm)
return x_norm
def angle(x, y):
v = np.inner(x, y) / (L2_norm(x) * L2_norm(y))
theta = np.arccos(v)
return theta
📒 [解答]ベクトル-1~5
5/5 Solve
📝 Q1
Q)次のベクトルのL 1-賭け(整数値入力)を求める
x = [-1, 2, -3]
A) 1 + 2 + 3 = 6📝 Q2
Q)次のベクトルのL 2-賭け(整数値入力)を求める
x = [-6, -8]
A) sqrt(36 + 64) = sqrt(100) = 10📝 Q3
Q)L 2-ギャンブルを用いて2つのベクトル間の距離を求める(整数値入力)
x = [-3, 0]
y = [0, 4]
A) L2(x - y) = L2([-3, -4]) = sqrt(9 + 16) = sqrt(25) = 5 📝 Q4
Q)2つのベクトルの間の挟み角(入力アーク単位:0以上、7未満の整数値)を求める
x = [0, 1]
y = [0, 2]
A) θ = 内在(x,y)/(L 2(x)*L 2(y)=2/(1*2)=1.-> arccos(θ) = arccos(1) = 0
📝 Q5
Q)内積が次のように定義される場合:
<x, y> = ||x||₂||y||₂cos(θ)
x = [1, -1, 1, -1]
y = [4, -4, 4, -4]
A) L2(x) * L2(y) * cos(θ) = 2 * 8 * 1 = 16📒 チームは何ですか。
理論はすべて理解したが、最後の応用部分を聞いてもあまり理解できなかった.
マトリックス演算は深さ学習の核心だそうです.
モデルを直接実現するには、本当に重要な部分のようです.
自分を理論から応用に導くためには、多くの勉強が必要らしい.
📝 列
📝 マトリックス演算
▼▼行列乗算
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0, 1],
[1, -1],
[-2, 1]])
>>> X @ Y # numpy에선 @ 연산을 사용한다.
array([[-8, 6],
[5, 2],
[-5, 1]])
▼▼マトリックス内積
▼▼逆行列
X = np.array([1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
np.linalg.inv(X) # 역행렬 구하기
X = np.array([[0, 1],
[1, -1],
[-2, 1]])
np.linalg.pinv(X) # 유사 역행렬 구하기
📝 適用
▼▼▼連立方程式を解く
▼▼線形回帰分析
📒 [解答]マトリックス-1~5
5/5 Solve
📝 Q1
Q)マトリクスXの正しい前置マトリクスを以下のオプションで選択してください.
X = [[1, 2, 3],
[4, 5, 6]
[7, 8, 9]]
1. [[3, 2, 1],
[6, 5, 4],
[9, 8, 7]]
✔️2. [[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]
3. [[9, 8, 7],
[6, 5, 4],
[3, 2, 1]]
4. [[7, 8, 9],
[4, 5, 6],
[1, 2, 3]]
5. [[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
📝 Q2
Q)2つの行列の積は、各行列の形状とは無関係であってもよい.
A)いいえ
📝 Q3
Q)任意の行列の逆行列は常に計算可能である.
A)いいえ
📝 Q4
Q)マトリクスXの正しい逆マトリクスを以下のオプションで選択してください.
X = [[1, 0, 1],
[0, 1, 0]
[1, 1, 0]]
1. [[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
2. [[1, 0, 1],
[0, 1, 0],
[1, 1, 0]]
3. [[1, 0, 1],
[0, 1, 1],
[1, 0, 0]]
✔️4. [[0, -1, 1],
[0, 1, 0],
[1, 1, -1]]
5. [[0, -1, 1],
[-1, 1, 0],
[1, 0, -1]]
📝 Q5
Q)マトリクスXの正しいモール・ペンロス逆マトリクスを以下のオプションで選択してください.
X = [[1, 0, 1],
[0, 1, 0]]
1. [[1, 0],
[0, 1],
[1, 1]]
2. [[1, 1],
[1, 1],
[0, 0]]
✔️3. [[0.5, 0],
[0, 1],
[0.5, 0]]
4. [[0.5, 0.5],
[0, 0.5],
[0.5, 0]]
5. [[0, 1],
[1, 0],
[0, 1]]
Reference
この問題について([Week 2]Day 6 Numpy/ベクトル/行列), 我々は、より多くの情報をここで見つけました https://velog.io/@gyuho/Week2-Day6-Numpy-벡터-행렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol