728x90
반응형
넘파이란?
- 넘파이는 행렬이나 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 Python의 라이브러리이다. 넘파이는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한다 (출처: 위키백과)
배열 생성
import numpy as np
d1 = np.array([1, 2, 3, 4])
d1
>> array([1, 2, 3, 4])
- 가장 기본적인 넘파이의 배열 생성이다. 첫번째 줄은 numpy를 간단하게 쓰기 위해 사용한다. 사실 없어도 되지만 편의성을 위해 거의 규칙처럼 np로 사용한다.
- np.array() 를 이용해 괄호 안에 배열을 넣어주면 간단하게 생성이 가능하다.
자료형 확인
type(d1)
>> numpy.ndarray
- ndarray는 N-Dimension array 즉 N차원의 배열을 의미한다.
d1.dtype
>> dtype('int32')
- type과는 다르게 배열의 요소를 확인하는 dtype이 있다. 함수가 아니니 소괄호를 뒤에 붙히지 않는다. 현재 data의 요소는 1, 2, 3, 4이기 때문에 int32로 확인이 된다.
d2 = np.array([1, 2, 3.2, 4]) # 하나의 데이터 타입으로 통일된다. 이 경우 float로 통일
d3 = np.array([1, 2, 3.2, '안녕하세요']) # 이 경우 문자열로 통일
d3
>> array(['1', '2', '3.2', '안녕하세요'], dtype='<U32')
- 데이터 타입은 한 가지로 통일된다. 즉, int와 float가 섞여 있다면 데이터 타입은 float이고, int, float, string이 섞여 있다면 데이터 타입은 string이 된다. U32 타입은 문자열의 한 종류라고 보면 된다.
넘파이 배열의 크기
d1.shape
>> (4,)
- d1의 데이터는 1, 2, 3, 4이다. shape은 크기를 나타낸다. d1은 2차원으로 열을 생성해주기 않았기에 (4, )로 출력된다.
d4 = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])
d4.shape
>> (3, 3)
- 3행 3열의 행렬을 나타낸다.
넘파이 행렬 데이터 다루기
d4.shape # 3행 3열 데이터
d4[1] # 1행의 모든 데이터 꺼내기
d4[1, 2] # 1행 2열의 데이터 꺼내기
d4[0:2 , 1:3] # 슬라이싱을 통한 데이터 꺼내기
d4[ : , 2] # 모든 행의 2번 열(0번부터 시작하니 순서로 치면 3번째) 데이터 꺼내기
>> (3, 3)
>> array([4, 5, 6])
>> 6
>> array([[2, 3],
[5, 6]])
>> array([3, 6, 9])
- 위처럼 데이터를 꺼낼 수 있다.
np.arange를 통해 배열 만들기
d5 = np.arange(5)
d5
d6 = np.arange(1, 10, 2)
d6
>> array([0, 1, 2, 3, 4])
>> array([1, 3, 5, 7, 9])
- arange는 array range의 줄임말이다. 파이썬에서 쓰이는 range와 같은 기능을하며 arange를 통해 배열 생성이 가능하다.
넘파이 배열의 차원 변환
d7 = np.arange(12)
d7
d8 = d7.reshape(2, 6)
d9 = d7.reshape(3, -1)
>> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>> array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
>> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
- reshape를 통해 차원 변환이 가능하다. 처음 d7은 0부터 11까지의 데이터가 1차원으로 생성되었다. reshape(2, 6)을 함으로써 2행 6열의 행렬로 변환이 가능하다.
- d9를 보면 열을 지정하는 부분에 -1이 들어가있다. 행을 3으로 지정하면 열은 당연히 4가 될 것이다. -1을 사용해주면 자동으로 알맞게 4로 지정되어 행렬이 만들어진다. 위와 같이 데이터의 개수가 작을 때는 상관 없겠지만 데이터 개수가 커지면 계산하기 어려울 수 있기에 이 기능을 사용한다.
d10 = d7.reshape(2, 6, order='F') # order='F' 는 열 단위로 채운다. 자주 나오는 것은 아니다.
d10
>> array([[ 0, 2, 4, 6, 8, 10],
[ 1, 3, 5, 7, 9, 11]])
- order='F'는 열 단위로 행렬을 재배치하는 것이다. 세로 방향으로 데이터가 정렬되는 것을 볼 수 있다.
np.ndarray의 max, min, mean, std
data = np.arange(1, 5).reshape(2, 2)
data
>> array([[1, 2],
[3, 4]])
np.max(data)
np.max(data, axis=0) # 각 열방향으로 큰 값을 뽑는다
np.max(data, axis=1) # 각 행 방향으로 큰 값을 뽑는다.
>> 4
>> array([3, 4])
>> array([2, 4])
- np.max를 통해 가장 큰 값을 찾을 수 있다.
- axis=0은 열방향으로 큰 값을 뽑는다. 즉 1열과 2열의 각각 최대값을 뽑아준다.
- axis=1은 반대로 행 방향으로 큰 값을 뽑는다. 즉, 1행과 2행의 각각 최대값을 뽑아준다.
np.min(data)
>> 1
- np.min을 통해 최소값을 찾을 수 있다.
np.mean(data)
np.std(data)
>> 5
>> 1.118033988749895
- np.mean은 평균을 계산해주고, np.std는 평균 표준편차를 계산해준다.
넘파이 행렬의 사칙연산
data = np.arange(1, 5).reshape(2, 2)
data
>> array([[1, 2],
[3, 4]])
np.add(data, data)
np.subtract(data, data)
np.multiply(data, data)
>> array([[2, 4],
[6, 8]])
>> array([[0, 0],
[0, 0]])
>> array([[ 1, 4],
[ 9, 16]])
- np.add: 더하기
- np.subtract: 빼기
- np.multiply: 곱하기
np.dot(data, data) # 행렬곱셈
>> array([[ 7, 10],
[15, 22]])
- 요소간 곱셈과는 다르게 np.dot을 이용해 행렬곱셈이 가능하다.
728x90
반응형
'파이썬[Python]' 카테고리의 다른 글
[파이썬/Python] 리스트/튜플/세트/딕셔너리 비교 (0) | 2024.10.02 |
---|---|
[파이썬/Python] 로또 번호 시뮬레이션 프로젝트 (0) | 2023.11.08 |
[파이썬/Python] 리스트(List)의 다양한 함수 - 삭제, 삽입, 정렬 (1) | 2023.11.03 |
[파이썬/Python] 옵셔널 파라미터 (optional parameter) (0) | 2023.11.02 |
[파이썬/Python] 파이썬에서 여러가지 포맷팅(format) 방법 (0) | 2023.11.02 |