반응형

 

 

 

1. Zip을 이용하여 Vector 계산하기

u = [2,2]
v = [2,3]
z = [3,5]

print("vector의 덧셈")
result = [sum(t) for t in zip(u,v,z)]
print(result)

print("vector의 뺄셈")
result = [x-y-z for x,y,z in zip(u,v,z)]
print(result)
vector의 덧셈
[7, 10]
vector의 뺄셈
[-3, -6]

 

 

 

 

2. Scalar-Vector product

상수(Scalar)와 리스트(Vector)를 한번에 곱하는 방법

print("scalar-vector product")
u = [1,2,3]
v = [4,4,4]
alpha = 2

result = [alpha * sum(z) for z in zip(u, v)]
print(result)
scalar-vector product
[10, 12, 14]

 

 

 

3. Matrix addition

** zip으로 matrix를 풀면 ([3,6]) 이런 식으로 튜플로 묶이기 때문에, asterisk(*)로 풀어줘야 한다.

matrix_a  = [[3, 6], [4, 5]]
matrix_a  = [[5, 8], [3, 7]]

result = [[sum(row) for row in zip(*t)] for t in zip(matrix_a, matrix_b)]

print(result)
Matrix addition
[[8, 14], [7, 12]]

 

 

 

4. Scalar-Matrix Product

matrix_a = [[3, 6], [4, 5]]
alpha = 4
result = [[alpha * element for element in t] for t in matrix_a]

print(result)
Scalar-Matrix Product
[[12, 24], [16, 20]]

 

 

 

5. Matrix Transpose

print("Matrix Transpose")
matrix_a = [[1, 2, 3], [4, 5, 6]]
result = [[element for element in t] for t in zip(*matrix_a)]

print(result)
Matrix Transpose
[[1, 4], [2, 5], [3, 6]]

 

 

 

6. Matrix Product

print("Matrix Product")
matrix_a = [[1, 1, 2], [2, 1, 1]]
matrix_b = [[1, 1], [2, 1], [1, 3]]
result = [[sum(a * b for a, b in zip(row_a, column_b))
          for column_b in zip(*matrix_b)] for row_a in matrix_a]
print(result)
Matrix Product
[[5, 8], [5, 6]]

 

** asterisk를 하고 zip 을 하면 컬럼을 가져올 수 있다 !!

 

 

 

 

 

 

반응형

'AI > Numpy & Pandas' 카테고리의 다른 글

Data preprocessing  (0) 2021.01.22
판다스 기본  (0) 2021.01.20
선형대수 기초  (0) 2021.01.12
반응형

 

 

 

Scala : 하나의 숫자

Vector : 순서가 정해져있는 배열  => 순서가 없는 배열은 Set이라고 한다.

Matrix : 행렬(row, column), two dimensional array

 

 

1. Vector 

Row Vector와 Column Vector 가 있는데, Column Vector를 기본으로 생각한다. Row Vector는 Column Vector를 Transpose하여 나타낸다. 

Column Vector를 매트릭스로 나타내면, R(nx1)

Row Vector를 매트릭스로 나타내면 R(1xn)

 

 

 

 

2. Matrix

1) Square Matrix  (rows = columns)

ex) B = [1 5] [2 3]

 

2) Rectangular Matrix  (rows != columns)

ex) A = [1 6] [3 4][5 2]

 

3) Transpose Matrix

ex) AT = [1 3 5] [6 4 2]

 

4) Ai,j

ex) A2,1 =3

 

5) Ai, : i행의 모든 값

ex) A1, = [1 6]

 

6) A,j : j열의 모든 값

ex) A,2 = [6 4 2]

 

 

 

 

 

 

 

 

 

3. Matrix의 계산

1) 더하기 빼기

행과 열의 개수가 모두 같은 상태에서 그대로 더하고, 그대로 빼주면 된다.

 

2) 곱하기

A3,2 X B2,5 이렇게 두 행렬을 곱할 때,

가운데 2가 동일해야 곱할 수 있다.

 

 

4. Matrix 계산의 성질

1) (AB)^T = B^T x A^T

 

2) AB != BA

같지 않다!

 

 

 

 

반응형

'AI > Numpy & Pandas' 카테고리의 다른 글

Data preprocessing  (0) 2021.01.22
판다스 기본  (0) 2021.01.20
선형대수 파이썬으로 구현해보기 !  (0) 2021.01.14
반응형

 

 

 

 

 

Ordered Dict

일반적인 Dictionary는 입력한대로 순서대로 저장하지 않는다.

Ordered Dict를 사용하면 입력한대로 순서대로 저장해준다.

 

 

 

Default Dict

딕셔너리에서 기본 값을 설정해주어서 키 값만 넣어주어도 밸류 값을 기본 값으로 설정해준다.

 

 

 

Counter

한 단어 안에 알파벳별로 몇 개가 들어있는지 조회해준다.

 

 

 

 

 

반응형

'AI > python' 카테고리의 다른 글

python 문자열 부분 일치, 앞부분 일치, 뒤부분 일치  (0) 2021.06.15
Pythonic Code - Set()  (0) 2021.01.15
Pythonic Code - asterisk  (0) 2021.01.12
Pythonic Code - Lambda & MapReduce  (0) 2021.01.11
Pythonic Code - Enumerate, Zip  (0) 2021.01.10
반응형

 

Asterisk

우리가 흔히 알고 있는 * 을 의미한다.

단순 곱셈, 제곱 연산, 가변 인자 활용 등 다양하게 사용된다.

 

가변 인자 활용 => 변수 여러 개를 packing하여 한번에 넘겨줄 때

def astarick_test(a, *args):
    print(a, args)
    print(type(args))

astarick_test(1,2,3,4,5,6)
def astarick_test(a, *args):
    print(a, args)
    print(type(args))

astarick_test(1,*(2,3,4,5,6))
1 (2, 3, 4, 5, 6)
<class 'tuple'>

 

*(2,3,4,5,6) = 2,3,4,5,6 이기 때문이다.

 

 

 

키, 밸류 값을 한번에 넘겨줄 때 => ** 을 쓴다.

def astarick_test(a, **karg):
    print(a, karg)
    print(type(karg))

astarick_test(1, b=2, c=3, d=4, e=5)
1 {'b': 2, 'c': 3, 'd': 4, 'e': 5}
<class 'dict'>

 

 

 

변수 여러 개를 unpacking할 때 

def astarick_test(a, args):
    print(a, *args)     # unpacking
    print(type(args))

astarick_test(1,(2,3,4,5,6))
1 2 3 4 5 6
<class 'tuple'>

 

 

 

 

이미 packing 되어있는 튜플에 asterisk를 하면 )

def asterisk_test(a, *args):
    print(a, args[0])
    print(type(args))

asterisk_test(1, (2, 3, 4, 5, 6))
1 (2, 3, 4, 5, 6)
<class 'tuple'>

 

args = ((2, 3, 4, 5, 6),) 가 된다. 따라서 args의 첫 번째 인덱스만 꺼내 주어야 한다.

 

 

 

 

일반적인 unpacking

a, b, c = ([1,2],[3,4],[5,6])
print(a,b,c)

data = ([1,2],[3,4],[5,6])      #unpacking
print(*data)
[1, 2] [3, 4] [5, 6]
[1, 2] [3, 4] [5, 6]

 

def asterick_test(a,b,c,d):
    print(a,b,c,d)

data = {"b":1,"c":2,"d":3}
asterick_test(10, **data)
10 1 2 3

 

 

for data in zip(*([1,2],[3,4],[5,6])):
    print(sum(data))
9
12

 

 

반응형

'AI > python' 카테고리의 다른 글

Pythonic Code - Set()  (0) 2021.01.15
Pythonic Code - Deque, Ordered Dict, Counter  (0) 2021.01.12
Pythonic Code - Lambda & MapReduce  (0) 2021.01.11
Pythonic Code - Enumerate, Zip  (0) 2021.01.10
Pythonic Code - List Comprehension  (0) 2021.01.10
반응형

 

 

 

 

 

Lambda는 함수를 다르게 쓴 것이라고 보면 된다.

f = lambda x, y: x + y
print(f(1,2))

f = lambda x: x ** 2
print(f(3))

f = lambda x: x / 2
print(f(4))

 

 

꼭 함수의 이름을 지정하지 않고도 사용할 수 있다.

print((lambda x: x+1)(5))

 

 

 

lambda에 필터 껴주기 

=> lambda에서 if 문 쓸 때에는 꼭 else도 써 주어야 한다.

# lambda에 필터 껴주기
a = list(map(lambda x: x ** 2 if x % 2 == 0 else x, ex))
print(a)
[1, 4, 3, 16, 5]

 

 

 

python 3에서는 list comprehension으로 편하게 쓸 수 있기 때문에 lambda의 사용이 권장되지 않는다.

b = [x ** 2 for x in ex]
print(b)
[1, 4, 9, 16, 25]

 

 

Reduce 

: 값을 하나하나 꺼내면서 수식 처리를 해 주는 것이다.

 

예시 ) 값을 하나하나 꺼내면서 더해준다.

# Reduce
from functools import reduce
print(reduce(lambda x,y: x+y, [1,2,3,4,5]))
15

 

 

 

예시 ) 값을 하나하나 꺼내면서 곱해준다.

def factorial(n):
    print(reduce(lambda x,y: x*y, range(1,n+1)))

factorial(4)
24

 

 

 

 

 

 

 

 

 

반응형

'AI > python' 카테고리의 다른 글

Pythonic Code - Deque, Ordered Dict, Counter  (0) 2021.01.12
Pythonic Code - asterisk  (0) 2021.01.12
Pythonic Code - Enumerate, Zip  (0) 2021.01.10
Pythonic Code - List Comprehension  (0) 2021.01.10
파이썬 기초 끝 ! + map 함수  (0) 2021.01.10
반응형

 

 

Enumerate는 리스트의 인덱스와 함께 값을 추출할 때 사용한다.

Zip은 여러 개의 리스트에서 각각의 값을 병렬적으로 가져올 때 사용한다.

 

Enumerate

for i,j in enumerate(['tic','tac','toe']):
    print(i,j)

myList = ['a','b','c','d']
print(list(enumerate(myList)))

myTuple = {i:j for i,j in enumerate('Apple Banana Computer Dictionary Eraser Food'.split())}
print(myTuple)
0 tic
1 tac
2 toe
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
{0: 'Apple', 1: 'Banana', 2: 'Computer', 3: 'Dictionary', 4: 'Eraser', 5: 'Food'}

 

 

 

 

Zip

alist = ['a1','a2','a3']
blist = ['b1','b2','b3']

for a, b in zip(alist, blist):
    print(a,b)
a1 b1
a2 b2
a3 b3

 

 

 

Zip 과 Enumerate를 같이 사용하면?

# zip + enumerate
for i, (a, b) in enumerate(zip(alist, blist)):
    print(i,a,b)
0 a1 b1
1 a2 b2
2 a3 b3

이 때, (a,b)에서 괄호를 꼭 붙여 주어야 한다!!

 

 

 

리스트나 튜플에서 각각의 값을 꺼내어 새로운 리스트를 만들 수도 있다.

# 리스트 활용
cList = [1,2,3]
dList = [10,20,30]
eList = [100,200,300]

result = [sum(x) for x in zip(cList, dList, eList)]
print(result)

# 튜플 활용
aTuple = (1,2,3)
bTuple = (10,20,30)
cTuple = (100,200,300)

result = [sum(x) for x in zip(aTuple, bTuple, cTuple)]
print(result)
[111, 222, 333]
[111, 222, 333]

 

 

 

 

 

반응형

+ Recent posts