Boostcamp AI Tech

[Boostcamp Day-5] Python - Numpy

ju_young 2021. 8. 6. 11:19
728x90

numpy의 특징은 일반 list에 비해 빠르고, 메모리를 효율적으로 사용할 수 있고 반복문 없이 데이터 배열에 대한 처리를 지원한다.

install

activate ml
conda install numpy

import

import numpy as np

array creation

np.array 함수를 사용하여 array를 생성할 수 있다.

test_array = np.array([1, 4, 5, 8], float)

shape, dtype

shape으로 array의 dimension 구성을 확인 할 수 있고 dtype으로 array의 데이터 type을 확인 할 수 있다. 위에서 array를 생성할때 지정해준 float가 바로 dtype을 지정해준 것이다.

test_array.shape
test_array.dtype

nbytes

ndarray object의 메모리 크기를 반환하는 함수이다.

np.array([[1, 2, 3], [4.5, "5", "6"]], dtype=np.float32).nbytes

reshape

array의 shape의 크기를 변경할 수 있는 함수이다.

np.array(test_matrix).reshape(8,)

예를 들어서 reshape(-1, 2)라고 해주면 여기서 -1은 뒤에 2를 기준으로 알아서 숫자를 맞춰달라는 의미가 된다.

flatten

다차원 array를 1차원 array로 반환해준다.

np.array(test_matrix).flatten()

indexing

list와는 달리 이차원 배열에서 [0,0]과 같은 표기법을 제공해준다.

print(test_matrix[0, 0])
print(test_matrix[0][0]) #물론 이렇게도 표기할 수 있다.

slicing

슬라이싱도 list와 달리 행과 열 부분을 나눠서 슬라이싱이 가능하다

print(test_matrix[:, 2:])
print(test_matrix[1, 1:3])

arange

array의 범위를 지정하여 값의 list를 생성하는 함수이다.(가끔 arrange와 헷갈린다....)

np.arange(30)

ones, zeros, empty

#zeros : 0으로 가득찬 ndarray 생성
np.zeros(shape, dtype, order)

#ones : 1로 가득찬 ndarray 생성
np.ones(shape, dtype, order)

#empty : shape만 주어지고 비어있는 ndarray 생성
np.empty(shape=(10,), dtype=np.int8)

something_like

기존 ndarray의 shape 크기만큼 1, 0 또는 empty array를 반환해준다.

np.ones_like(test_matrix)
np.zeros_like(test_matrix)

identity

단위 행렬을 생성해주는 함수이다.

np.identity(5)

eye

identity와 비슷하지만 시작 index를 지정해줄 수 있다.

np.eye(3, 5, k=2)

diag

대각 행렬의 값을 추출해주는 함수이다.

np.diag(matrix)

random sampling

데이터 분포에 따른 sampling으로 array를 생성하는 것을 말한다.

# 균등분포
np.random.uniform(0, 1, 10).reshape(2, 5)

# 정규분포
np.random.normal(0, 1, 10).reshape(2, 5)

sum

element들 간의 합을 구하는 함수이다.

test_array.sum(dtype=np.float)

axis

모든 operation function을 실행할 때 기준이 되는 dimension 축을 의미하며 처음에는 상당히 헷갈리는 부분이다.

test_array.sum(axis=0)
test_array.sum(axis=1)

다음과 같이 그림으로 확인하면 좀 더 이해하기 쉽다.

mean & std

각각 평균값과 표준 편차를 반환해주는 함수이다.

# 평균값
test_array.mean()
# 표준편차
test_array.std()

vstack & hstack

vstack에서 v는 vertical일거라고 쉽게 유추할 수 있고 vertical 방향으로 합쳐지는 함수이다. 즉, 행끼리 합쳐진다고 생각하면 된다. 반대로 hstack은 horizontal 방량으로 합쳐지는 함수이므로 열끼리 합쳐지는 함수라 생각하면 된다.

np.vstack((a,b))
np.hstack((a,b))

concatenate

concatenate는 axis를 지정하여 방향을 정하고 array끼리 합쳐주는 함수이다.

np.concatenate((a,b), axis=0)
np.concatenate((a,b), axis=1)

array operations

다음과 같이 array간의 기본적인 사칙 연산을 지원한다.

test_a + test_a
test_a - test_a
test_a * test_a # element 곱이 이루어진다

Dot product

행렬곱은 dot함수를 사용한다.

test_a.dot(test_b)

transpose

전치행렬은 array 뒤에 T 또는 transepose()를 붙여주면 된다.

test_a.T
test_a.transpose()

broadcasting

다음과 같이 두 개의 array의 shape이 다르면 분배법칙에 따른 계산이 이루어진다.

timeit

주피터 환경에서 코드의 퍼포먼스를 체크하기위해 timeit 함수를 사용할 수 있다.

%timeit np.arange(test_a) * scalar

일반 적으로 속도는 다음과 같이 나온다.
for loop < list comprehention < numpy

All & Any

array의 데이터 전부(and) 또는 일부(or)가 조건에 만족하는 여부를 반환해주는 함수들이다.

a = np.arange(10)
np.any(a > 5)
np.any(a < 0)
np.all(a > 5)
np.all(a < 10)

comparison operation

numpy는 배열의 크기가 동일 할 때 element간 비교의 결과를 boolean type으로 반환해준다.

test_a = np.array([1, 3, 0])
test_b = np.array([5, 2, 1])
test_a > test_b
test_a == test_b

a = np.array([1, 3, 0])
np.logical_and(a > 0, a < 3) # and 조건의 condition

b = np.array([True, False, True])
np.logical_not(b) # not 조건의 condition

c = np.array([False, True, Flase])
np.logical_or(b, c) # or 조건의 condition

where

np.where(a > 0, 3, 2) #where(condition ,True, False)
np.where(a > 0) # index 값을 반환

np.isnan(a) # np.nan 값인지 확인
np.isfinite(a) # np.inf 값인지 확인

argmax & argmin

array내 최대값 또는 최솟값의 index를 반환한다.

np.argmax(a)
np.argmin(a)
# axis 기반으로 반환
np.argmax(a, axis=1)
np.argmin(a, axis=0)

boolean index

특정 조건에 따른 값을 배열 형태로 추출해줄 수 있다.

test_array[condition > 3] # True인 값의 위치 index에 맞는 element만 추출된다

fancy index

numpy는 array를 index value로 사용해서 값을 추출할 수 있다.

a = np.array([2, 4, 6, 8])
b = np.array([0, 0, 1, 3, 2, 1]) # 반드시 integer로 선언
a[b] # bracket index, b 배열의 값을 index로 하여 a의 값들을 추출

a.take(b) #bracket index와 같은 효과

loadtxt & savetxt

text type의 데이터를 읽고 저장하는 함수들이다.

a = np.loadtxt("./test.txt")
np.savetxt('test.csv', a, delimiter=',')
728x90