Numpy array
의 장점
pythonlist()
보다 빠른 연산, 효율적 메모리 사용.
np.array - 배열 생성
np.zeros - 0이 들어있는 배열 생성
np.ones - 1이 들어있는 배열 생성
np.empty - 초기화가 없는 값으로 배열을 반환
np.arange(n) - 배열 버전의 range 함수
np.random - 다양한 난수가 들어있는 배열 생성
list(range(10))
#[0,1,2,3,4,5,6,7,8,9]
import numpy as np
#1차원 배열
np.array([1, 2, 3, 4, 5])
#array([1, 2, 3, 4, 5])
#중간에 실수 형태가 들어갈 때
np.array([1, 2.1, 3, 4, 5])
#array([1., 2.1, 3., 4., 5.])
#2차원 배열
np.array([1, 2],
[3, 4])
# array([1, 2],
[3, 4])
# 실수 형태로 만들기
np.array([1, 2, 3, 4], dtype='float')
#array([1., 2., 3., 4.])
Python List와 다르게 array는 단일타입으로 구성
dtype | 설명 | 다양한표현 |
---|---|---|
int | 정수형타입 | i, int_, int32, int64, i8 |
float | 실수형타입 | f, float_, float32, float64, f8 |
str | 문자열타입 | str, U, U32 |
bool | 부울타입 | ?, bool_ |
ndarray : n차원의 array
arr = np.array([1, 2, 3, 4], dtype=float)
arr # array([1., 2., 3., 4.])
arr.dtype
# dtype(‘float64’)
arr.astype(int)
# array([1, 2, 3, 4])
np.zeros(10, dtype=int)
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.ones((3, 5), dtype=float)
# array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
np.arange(0, 20, 2)
# array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.linspace(0, 1, 5)
# array([0. , 0.25, 0.5 , 0.75, 1. ])
np.random.random((2, 2))
# array([[0.30986539, 0.85863508],
[0.89151021, 0.19304196]])
np.random.normal(0, 1, (2, 2))
# array([[ 0.44050683, 0.04912487],
[-1.67023947, -0.70982067]])
np.random.randint(0, 10, (2, 2))
# array([[3, 9],
[3, 2]])
x2 = np.random.randint(10, size=(3, 4))
# array([[2, 2, 9, 0],
[4, 2, 1, 0],
[1, 8, 7, 3]])
#차원
x2.ndim # 2
#행렬의 모형
x2.shape # (3, 4)
#원소 갯수
x2.size # 12
x2.dtype # dtype(‘int64’)
Indexing, Slicing -> python과 동일
reshape: array의 shape를 변경
x = np.arange(8)
x.shape
# (8,)
x2 = x.reshape((2, 4))
# array([[0, 1, 2, 3],
[4, 5, 6, 7]])
x2.shape
# (2, 4)
x = np.array([0, 1, 2])
y = np.array([3, 4, 5])
np.concatenate([x, y])
# array([0, 1, 2, 3, 4, 5])
matrix = np.arange(4).reshape(2, 2)
np.concatenate([matrix, matrix], axis=0)
matrix = np.arange(4).reshape(2, 2)
np.concatenate([matrix, matrix], axis=1)
matrix = np.arange(16).reshape(4, 4)
left, right = np.split(matrix, [3], axis=1)
array는 +, - *, /에 대한 기본 연산을 지원
x = np.arange(4)
# array([0, 1, 2, 3])
x + 5
# array([5, 6, 7, 8])
x - 5
# array([-5, -4, -3, -2])
x * 5
# array([ 0, 5, 10, 15])
x / 5
# array([0. , 0.2, 0.4, 0.6])
다차원 행렬에서도 적용 가능
x = np.arange(4).reshape((2, 2))
y = np.random.randint(10, size=(2, 2))
x + y
# array([[1, 7],
[6, 5]])
x - y
# array([[-1, -5],
[-2, 1]])
Broadcasting: shape이 다른 array끼리 연산
matrix + 5
matrix + np.array([1, 2, 3])
np.arange(3).reshape((3,1)) + np.arange(3)
max 메소드와 min 메소드를 사용하면 numpy array의 최댓값과 최솟값을 구할 수 있습니다.
mean 메소드를 사용하면 numpy array의 평균값을 구할 수 있습니다.
median 메소드를 사용하면 중간값을 구할 수 있는데요. 특이하게 median은 numpy array의 메소드가 아니라 numpy의 메소드입니다.
x = np.arange(8).reshape((2, 4))
np.sum(x)
# 28
np.min(x)
# 0
np.max(x)
# 7
np.mean(x) => 평균 평균
# 3.5
np.std(x) => 표준편차
------------------------------------
x = np.arange(8).reshape((2, 4))
np.sum(x, axis=0)
# array([ 4, 6, 8, 10])
np.sum(x, axis=1)
# array([ 6, 22])
x = np.arange(5)
# array([0, 1, 2, 3, 4])
x < 3
# array([ True, True, True, False, False])
x > 5
# array([False, False, False, False, False])
x[x < 3]
# array([0, 1, 2])
numpy 모듈의 array 메소드에 파라미터로 파이썬 리스트를 넘겨주면 numpy array가 리턴됩니다.
array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31])
print(array1)
[ 2 3 5 7 11 13 17 19 23 29 31]
numpy 모듈의 full 메소드를 사용하면, 모든 값이 같은 numpy array를 생성할 수 있습니다.
array1 = numpy.full(6, 7)
print(array1)
[7 7 7 7 7 7]
모든 값이 0인 numpy array를 생성하기 위해서는 full 메소드를 사용하면 되겠죠. 하지만 사실은 더 간편한 방법이 있습니다.
array1 = numpy.full(6, 0)
array2 = numpy.zeros(6, dtype=int)
print(array1)
print()
print(array2)
[0 0 0 0 0 0]
[0 0 0 0 0 0]
모든 값이 1인 numpy array를 생성하는 것도 비슷합니다. zeros 메소드 대신 ones를 사용하면 됩니다.
array1 = numpy.full(6, 1)
array2 = numpy.ones(6, dtype=int)
print(array1)
print()
print(array2)
[1 1 1 1 1 1]
[1 1 1 1 1 1]
어쩔 때는 임의의 값들로 배열을 생성시키고 싶습니다. 그럴 때는 numpy의 random 모듈의 random 함수를 사용하면 됩니다.
numpy 모듈 안에 random이라는 모듈이 있고, 그 안에 또 random이라는 함수가 있는 겁니다!
array1 = numpy.random.random(6)
array2 = numpy.random.random(6)
print(array1)
print()
print(array2)
[0.42214929 0.45275673 0.57978413 0.61417065 0.39448558 0.03347601]
[0.42521953 0.65091589 0.94045742 0.18138103 0.27150749 0.8450694 ]
numpy 모듈의 arange 함수를 사용하면 연속된 값들이 담겨 있는 numpy array를 생성할 수 있습니다.
arange 함수는 파이썬의 기본 함수인 range와 굉장히 비슷한 원리로 동작하는데요. 파라미터가 1개인 경우, 2개인 경우, 3개인 경우 모두 살펴봅시다.
arange(m)을 하면 0부터 m-1까지의 값들이 담긴 numpy array가 리턴됩니다.
array1 = numpy.arange(6)
print(array1)
[0 1 2 3 4 5]
arange(n, m)을 하면 n부터 m-1까지의 값들이 담긴 numpy array가 리턴됩니다.
array1 = numpy.arange(2, 7)
print(array1)
[2 3 4 5 6]
arange(n, m, s)를 하면 n부터 m-1까지의 값들 중 간격이 s인 값들이 담긴 numpy array가 리턴됩니다.
array1 = numpy.arange(3, 17, 3)
print(array1)
[ 3 6 9 12 15]
출처 : 코드잇 - 데이터 사이언스 시작하기