height_weight_age=[70,
170,
40]
grades = [95,
80,
75,
62]
def vector_add(v,w):
"""각 성분끼리 더한다"""
return [v_i +w_i for v_i, w_i in zip(v,w)]
vector_add(height_weight_age,grades)
[165, 250, 115]
def vector_subtract(v,w):
"""각 성분끼리 뺀다"""
return [v_i - w_i for v_i, w_i in zip(v,w)]
vector_subtract(height_weight_age,grades)
[-25, 90, -35]
즉, 새로운 벡터의 첫 성분은 모든 벡터의 첫 번째 성분을 더한 값, 두 번째 성분은 모든 벡터의 두 번째 성분을 더한 값 등으로 구성된다. 벡터를 하나씩 더해 가는 방법이 가장 간단하다.
def vector_sum(vectors):
"""모든 벡터의 각 성분들끼리 더한다"""
result = vectors[0] # 첫 번째 벡터부터 시작해서
for vector in vectors[1:]: # 나머지 벡터들을
result = vector_add(result, vector) # 더해 준다
return result
def vector_sum(vectors):
return reduce(vector_add, vectors)
def scalar_multiply(c,v):
"""c는 숫자, v는 벡터"""
return [c*v_i for v_i in v]
def vector_mean(vectors):
"""i번째 성분이 입력된 벡터의 i번째 성분의 평균을
의미하는 벡터를 계산해 준다"""
n = len(vectors)
return scalar_multiply(1/n, vector_sum(vectors))
A = [[1,2,3],
[4,5,6]] # A는 2개의 행과 3개의 열로 구성되어 있다.
B = [[1,2],
[3,4],
[5,6]] # B는 3개의 행과 2개의 열로 구성되어 있다.
def shape(A):
num_rows = len(A)
num_cols = len(A[0]) if A else 0 # 첫 번째 행이 갖고 있는 원소의 수
return num_rows, num_cols
shape(A)
(2, 3)
shape(B)
(3, 2)
def get_row(A,i):
return A[i]
def get_column(A,j): # A_i 행의 j 번째 원소
return [A_i[j] for A_i in A] # 각 A_i 행에 대해
get_row(A,1)
[4, 5, 6]
get_column(B,1)
[2, 4, 6]
def make_matrix(num_rows, num_cols, entry_fn):
"""(i,j)번째 원소가 entry_fn(i,j)인
num_rows x num_cols list를 반환"""
return [[entry_fn(i, j)] # i가 주어졌을 때, list를 생성한다.
for j in range(num_cols) # [entry_fn(i,0)....]
for i in range(num_rows)] # 각 i에 대해 하나의 list를 생성한다.
def is_diagonal(i,j):
"""대각선의 원소는 1, 나머지 원소는 0"""
return 1 if i==j else 0
identity_matrix = make_matrix(5,5,is_diagonal)
'\n[[1,0,0,0,0],\n[0,1,0,0,0],\n[0,0,1,0,0],\n[0,0,0,1,0],\n[0,0,0,0,1]]\n'
print(identity_matrix)
[[1], [0], [0], [0], [0], [0], [1], [0], [0], [0], [0], [0], [1], [0], [0], [0], [0], [0], [1], [0], [0], [0], [0], [0], [1]]
[[1,0,0,0,0],
[0,1,0,0,0],
[0,0,1,0,0],
[0,0,0,1,0],
[0,0,0,0,1]]
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]