반응형

 

 

 

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
반응형

 

 

 

 

 

www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

 

 

 

코드

from collections import deque
deq = deque()

while True:

    s = input()
    flag = 1

    if s[0] == '.':
        break

    for i in range(len(s)):

        if s[i] == '[' or s[i] == '(':
            deq.append(s[i])
        elif s[i] == ']':
            if len(deq) != 0 and deq[len(deq)-1] == '[':
                deq.pop()
            else:
                flag = 0
                break
        elif s[i] == ')':
            if len(deq) != 0 and deq[len(deq)-1] == '(':
                deq.pop()
            else:
                flag = 0
                break

    if flag == 1 and len(deq) == 0:
        print("yes")
    else:
        print("no")

    deq.clear()

 

 

새로 알게된 문법 )

deq.clear() 하면 덱 안의 값이 모두 삭제된다.

 

 

반응형
반응형

 

 

 

 

 

 

www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

 

 

 

코드

n = (int)(input())

for i in range(n):
    funcstr = input()
    list_n = (int)(input())

    de = (str)(input())[1:-1].split(',')
    funcstr = funcstr.replace('RR','')

    if list_n == 0:
        de = []

    r_flag = 0
    flag = 1
    for j in range(len(funcstr)):
        if funcstr[j] == 'R':
            r_flag = not r_flag
        else:
            if len(de) == 0:
                print("error")
                flag = 0
                break

            if r_flag:
                de.pop(len(de)-1)
            else:
                de.pop(0)


    if flag == 1:
        if r_flag:
            de.reverse()
        print('[', end='')
        print(','.join(de), end='')
        print(']')

 

 

 

1. 양 옆의 '['와 ']'를 인덱싱으로 제거하고, 콤마를 기준으로 split() 

de = (str)(input())[1:-1].split(',')

 

 

2. 'RR'이면 다시 원상태이기 때문에 replace() 함수로 없애주었다.

funcstr = funcstr.replace('RR','')

 

3. 줄바꿈없이 print

print('[', end='')

 

 

4. 중간중간 콤마를 넣어 join

print(','.join(de), end='')

 

 

 

 

반응형
반응형

 

 

 

 

www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

 

 

파이썬 코드

from collections import deque

n, m = map(int, input().split())

deq = deque(i+1 for i in range(n))
li = list(map(int, input().split()))

sum = 0
for i in range(m):
    diff = deq.index(li[0])
    diff_rev = len(deq) - diff

    if diff == 0:
        li.pop(0)
        deq.popleft()
    elif diff < diff_rev:
        deq.rotate(-diff)
        sum += diff
        li.pop(0)
        deq.popleft()
    else:
        deq.rotate(diff_rev)
        sum += diff_rev
        li.pop(0)
        deq.popleft()

print(sum)

 

 

뽑아야 하는 값의 인덱스를 diff로, 전체 deque의 길이에서 diff를 뺀 값을 diff_rev로 놓았습니다.

diff가 0이면 뽑아야 하는 수가 가장 앞에 있다는 의미이므로 리스트와 deque에서 각각 값을 꺼냅니다.

diff 보다 diff_rev가 더 크면 deque를 오른쪽 방향으로 diff_rev 만큼 rotate 시킨 후 값을 꺼냅니다.

반대는 반대로 합니다.

 

 

 

 

 

 

반응형

+ Recent posts