Python/Python 코테 준비

Numpy 라이브러리 (1)

안정민 2024. 5. 1. 12:32

행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리하기 위해 지원하는 파이썬 라이브러리

데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공

 

1. 리스트를 배열로 바꾸기

import numpy as np

A=[1,2,3,4,5]
new_A=np.array(A)

#A의 타입은 리스트, new_A의 타입은 numpy.ndarray이다.
#A 출력 형태 -> [1, 2, 3, 4, 5]
#new_A 출력 형태 -> [1 2 3 4 5]

리스트를 배열(array)로 바꾸기 위해서는 np.array(리스트명) 로 코드를 작성하면 된다

 

 

2. 간단한 배열 만들기

num = np.array(range(0, 10))

- 0~9까지의 수를 num 이라는 배열(array)로 정의

-즉, array() 함수 내부의 매개 변수로 range 메소드가 들어갈 수 있다.

ones = np.ones([2,4], dtype="int32")

-배열이 2*4의 형태이고, 모든 원소가 1인 ones라는 배열 정의하는 함수

-즉 첫 번째 매개 변수는 배열의 형태, 두 번째 매개 변수는 배열 요소의 타입을 명시한다

-배열 요소는 모두 1로 채워진다

zeros = np.zeros([2,2,2], dtype="int8")

-배열이 2*2*2의 형태이고, 모든 원소가 0인 zeros라는 배열을 정의하는 함수

-첫 번째 매개변수는 똑같이 배열의 형태, 두 번째 매개면수는 배열 요소의 타입을 명시한다.

-배열 요소는 모두 0으로 채워진다

eyes = np.eye(3, dtype="int32")

-3*3 의 단위 행렬을 생성

-[1,0,0],[0,1,0],[0,0,1]의 단위 행렬을 생성한다.

eyes1 = np.eye(3, 5, k=1)

-3*5의 행렬을 만들고, 두 번째 주대각 원소가 1인 행렬을 생성한다

-실행 결과는 다음과 같다

 

 

3. 배열 형태 조정하기(reshape)

B=[1,3,5,6,8,10,13,16]
array_B=np.array(B)
reshape_B=array_B.reshape(2,4)

-기존에 있던 array를 사용자가 원하는 배열의 형태로 바꾸고 싶을 때 reshape를 사용하면 된다

-위의 예시에서는 1*8 의 배열을 2*4의의 배열로 새롭게 정의하였다.

 

 

4. array 기초 연산

l_exam=[1,2,3]
1_exam1=[4,5,6]
print(l_exam+l_exam1) 
# 리스트끼리 더하면 리스트가 병합이 되는 결과가 나옴
# 결과 : [1,2,3,4,5,6]

np_exam = np.array(l_exam)
np_exam1 = np.array(l_exam1)
print(np_exam+np_exam1)
#array끼리 더하면 각 원소별로 수치가 더해짐
#결과 : [5,7,9]

print(np_exam-np_exam1)
#빼기 연산도 가능하다
#결과 : [-3 -3 -3]

-리스트끼리 +연산을 취하면 각 리스트들끼리 병합이 된다

-하지만 array의 경우 +나 - 연산을 취하면 같은 위치에 있는 원소끼리 더하거나 빼는 작업이 진행되는 것을 알 수 있다

a=np.array([1,2,3,4])
new_a = a**3
#결과 : [1 8 27 64]

sin_a=10*np.sin(a)
#결과 : [8.41470 9.0929 1.4112 -7.5680]

check = (a<2) | (a>=3)
#결과 : [True False True True]
check1 = (a<2) & (a<3)
#결과 : [True False False False]

-**연산은 제곱을 계산하는 것이다

-sin함수는 numpy의 universal function 중 하나인데, 이는 삼각함수 사인 값 sin을 반환한다.

-마지막 두 줄은 데이터 클리닝(Data Cleaning)기술에 활용되는데, 어떤 배열에 대해서 특정 조건을 만족하는지 확인하는 데에 사용이 된다.

A= np.array([[1,1][0,1]])
B= np.array([[2,0][3,4]])

A*B
#결과 : [[2 0][0 4]]
A@B
#결과 : [[5 4][3 4]]
A.dot(B)
#결과 : [[5 4][3 4]]

-* 연산자는 elementwise product를 진행할 때 활용하는 연산자이다

-이는 동일한 위치의 원소들끼리 곱한 것을 반환하는 연산이다

-또 @ 연산자와 dot 메소드는 우리가 알고 있는matrix끼리 곱하는 연산이라고 생각하면 된다 

 

 

5. 행렬 전환

Mat = [[1,2,3],[4,5,6],[7,8,9]]
Mat = np.array(Mat)
trans_Mat = Mat.T

#trans_Mat 결과 : [[1 4 7][2 5 8][3 6 9]]

-특정 행렬에 대한 전치 행렬을 구하는 코드이다 (transpose matrix)