[Python] numpy 기초 정리

HyunDong Lee·2021년 4월 8일
0

python

목록 보기
2/6
post-thumbnail

인공지능 수업을 듣다가 나름 numpy를 잘 사용한다고 생각했었는데.. 문제가 잘 풀리지 않고 계속 구글링을 하는 나의 모습을 보면서 아예 이참에 따로 내용을 정리해놓으면 좋다고 생각을 했다. numpy 기초 정리

numpy 초기화 함수

보통 리스트를 초기화 할때 빈배열을 생성 시키거나 안에 0을 넣어서 초기화 해주는 기능이 있는것 처럼 numpy에도 같은 기능이 존재한다. 다음은 numpy 예제이다.

import numpy as np
a = np.zeros((2,2)) #괄호 안에는 차원의 수가 들어간다.
print(a)
a = np.ones((2, 3)) #괄호 안에는 차원의 수가 들어간다.
print(a)
a = np.full((4, 3), 5)
print(a)
a = np.array(range(12)).reshape((3,4))
print(a)

numpy slicing

list와 같이 slicing을 제공한다.

import numpy as np

lst = [[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]
      ]
narray = np.array(lst) #list를 np array로 바꿀 수 있다.
a = narray[0:2, 0:3]
print(a) #0~1행 0~2 열

a = narray[1:, 1:] #1번 행부터, 1번 열부터 끝까지
print(a)

실행결과

[[1 2 3]
 [4 5 6]]
[[5 6]
 [8 9]]

numpy arange

연속적인 숫자들을 출력하기 위해서 numpy는 arange 함수를 제공한다.

a= np.arange(10, 30, 5)
print(a)
b = np.arange(0, 2, 0.3)
print(b)

실행결과

[10 15 20 25]
[0.  0.3 0.6 0.9 1.2 1.5 1.8]

linspace

numpy arange는 부동 소수점 arguments와 사용될 때, 원소에 포함된 숫자를 예측하지 못하는데 이때 linspace 를 사용한다.

from numpy import pi
from matplotlib import pyplot as plt

a = np.linspace(0, 2, 9)
print(a)
x = np.linspace(0, 2*pi, 100)
f = np.sin(x)
print(f)
plt.plot(f)
plt.show()

실행결과

이와같이 matplotlib을 이용하면 그래프를 그려주는데 이는 다음 장에서 살펴본다.

Basic Operations

다른 행렬 언어와는 다르게 numpy는 원소 중심 연산이 가능하다.

a = np.array([20, 30, 40, 50])
b = np.arange(4)
print(b)
c = a - b
print(c)
print(b**2)
print(10*np.sin(a))
print(a < 35)
[0 1 2 3] 
[20 29 38 47]
[0 1 4 9]
[ 9.12945251 -9.88031624  7.4511316  -2.62374854]
[ True  True False False]

다른 일반 행렬 언어와 달리 곱셈 연산자로 numpy 행렬을 계산할수 있고 broadcasting이 가능한 dot 함수도 가지고 있다.

A = np.array([[1, 1],
             [2, 2]])
B = np.array([[2, 0],
             [3, 4]])
print(A*B) # elementwise product
print(A@B) # matrix product
B = np.array([2, 0])
print(A.dot(B)) # matrix product with broadcasting

실행결과

[[2 0]
 [6 8]]
[[ 5  4]
 [10  8]]
[2 4]

기본적으로 이러한 연산들은 배열의 모양과 상관없이 이루어진다.

b = np.arange(12).reshape(3, 4) #차원의 수와 range 수가 맞아떨어져야한다.
print(b)
'''[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]'''

print(b.sum(axis=0))
'''
[12 15 18 21]
'''

Universal Functions

넘파이는 친숙한 수학적 함수들을 제공하는데 sin, cos, exp등등 함수를 제공한다.
이런 함수들을 universal function이라고 한다.

B = np.arange(3)
print(B)
#[0 1 2]
print(np.exp(B))
#[1.         2.71828183 7.3890561 ]
print(np.sqrt(B))
#[0.         1.         1.41421356]
C = np.array([.2, .3, .5])
print(np.add(B,C))
#[0.2 1.3 2.5]

0개의 댓글