일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 위상정렬
- BFS
- series
- docker
- 문자열
- equals
- 파이썬
- 자바
- dataframe
- 포트앤어댑터 아키텍처
- 비트마스크
- 헥사고날 아키텍처
- spring security
- 백준
- java
- 이펙티브 자바
- dfs
- UML
- 세그먼트 트리
- DP
- disjoint set
- pandas
- ddd
- JPA
- 스프링
- 다익스트라
- 데이터 flow
- 알고리즘
- Redis
- springboot
- Today
- Total
코딩못하는사람
Numpy모듈 본문
1 NumPy 기본: 배열과 벡터 연산
Numpy 에서 제공하는 것
• 효율적인 다차원 배열인 ndarray는 빠른 배열 계산과 유연한 브로드캐스팅 기능 제공
• 반복문을 작성할 필요 없이 전체 데이터 배열을 빠르게 계산 할 수 있는 표준 수학함수
• 배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구와 메모리에 적재된 파일을 다루는 도구
• 선형대수, 난수 생성기, 퓨리에 변환 기능
데이터 분석 에서 중요하게 생각하는 기능
• 벡터 배열 상에서 데이터 가공, 정제 , 부분집합, 필터링 변형 그리고 다른 여러 종류의 연산을 빠르게 수행
• 정렬, 유일 원소 찾기, 집한 연산 같은 일방적인 배열 처리 알고리즘
• 통계의 효과적인 표현과 데이터를 수집 요약하기
• 다양한 종류의 데이터를 병합하고 역끼 위한 데이터 정렬과 데이터 간의 관계 조직
• 내부에서 if -elif- else를 사용하는 반복문 대신 사용할 수 있는 조건 표현을 허용하는 배열 처리
• 데이터 묶음 전체에 적용할 수 있는 수집, 변형 , 함수 적용 같은 데이터 처리
Numpy 사용
import numpy as np
배열선언 np.arange()
my_arr = np.arange(10) >>[0 1 2 3 4 5 6 7 8 9] np를 활용
my_list = list(range(10)) >>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 파이썬 기본 리스트
성능차이
Numpy를 사용한 코드 순수한 파이썬으로 작성한 코드보다 > 속도 : 열배 ~ 백배 빠름 > 메모리 적게사용
벡터화:배열의 중요한 특징은 for 을 사용하지않고 데이터를 일괄처리 가능하다
ex)각 배열의 값들을 2배 한다고하면 리스트는 for 문을 사용해야 하지만 np배열은 *2로 바로가능
%time for _ in range(10): my_arr2 = my_arr * 2
total: 59.3 ms
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
total: 666 ms
다차원 배열
(2,3)의 배열을 만든다고 가정하면
data = np.round(np.random.randn(2, 3))*10
[[ 2. 2. -4.]
[-0. 2. -2.]]
산술연산
data*2 = data+data(np타입 array라서 가능하다 리스트였으면 그냥 extend느낌)
[[ 4. 4. -8.]
[-0. 4. -4.]]
곱셈도 마찬가지 배열의 값들끼리 이루어짐
• .shape : 튜플과 배열에 저장된 각 차원의 크기
• .dtype : 튜플과 배열에 저장된 자료형
• .ndim : 배열의 차원수
ndarrays 생성하기
리스트를 생성후>np.array로 변환시켜줌
data=[1,2,3,4]
data=np.array(data)
zeros(): () 사이즈 만큼 0으로 채워진 배열 생성
ones():() 사이즈 만큼 1으로 채워진 배열 생성
empty():() 사이즈 만큼 빈 배열 생성
data1 =np.zeros((2,3))
[[0,0,0]
[0,0,0]]
dtype로 배열을 만들때 데이터 종류까지 설정가능
arr1 = np.array([1, 2, 3], dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)
astype으로 형변환도 가능
불린 인덱스
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data=np.array([1,2,3,4,5,6,7])
print(names == 'Bob')
>>>[ True False False True False False False]
print(data[names =='Bob') names에서 True였던 인덱스만 반환
>>>[1 4]
fancy indexing:
arr = np.arange(32).reshape((8, 4))>>8*4형식으로 0~31 생성
arr[[1, 5, 7, 2], [0, 3, 1, 2]] == arr[[1,0],[5,3],[7,1],[2,2]]
>>>[4,23,29,10]
arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] #arr[[1, 5, 7, 2]]한거에서 한번더 전체중에 0,3,1,2인덱스 순으로 배열하는것
>>>[[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]]
배열 전치와 축 바꾸기
전치행렬 (행과 열 바꾸기) =T
Transpose()연산
shape이 있을때 자신이 원하는 순서대로 변경가능
•Shape : (4, 5, 7)
•transpose(0, 1, 2) : (4, 5, 7)
•transpose(0, 2, 1) : (4, 7, 5)
•transpose(1, 2, 0) : (5, 7, 4)
•transpose(1, 0, 2) : (5, 4, 7
내적=np.dot
Tensor
랭크 :tensor의 차원수
3차원 텐서 Shape 규칙
(x, i, j) @ (x, j, k)을 연산할 때 x는 같거나 양쪽 중 한쪽이 1이여야 하며, 맨 끝 두개의 Shape은 (i, j) @ ( j, k)에서 j는 동일해야하고, 결과 Shape은 (x, i, k)가 된 다.
-
(4, 1, 2) @ (4, 2, 5) = (4, 1, 5)
-
(4, 1, 2) @ (3, 2, 5) = 가장 앞자리가 달라서 에러
-
(1, 1, 2) @ (3, 2, 5) = (3, 1, 5)
표현 >>print((rand(4, 1, 2) @ rand(4, 2, 5)).shape) (rand는 numpy.random모듈에 속함)
squeeze
필요 없는 텐서를 없애기 (1인것들을 줄여줌)
•Shape : (4, 1, 2) → squeeze : (4, 2)
•Shape : (4, 1, 1, 1, 2) → squeeze : (4, 2)
•Shape : (1, 4, 1, 2) → squeeze : (4, 2)
expand_dims
squeeze와 반대로 원하는 Axis에 크기가 1인 Axis를 새로 만듦
•Shape : (4, 2) → expand_dims(0) : (1, 4, 2)
•Shape : (4, 2) → expand_dims(1) : (4, 1, 2)
•Shape : (4, 2) → expand_dims(2) : (4, 2, 1)
Concatenate
두 텐서를 이어 붙여서 새로운 텐서. axis 값에 따라 shape의 크기가 늘어나는 곳을 알 수 있다.
split
배열을 원하는 크기로 나눠줌
a = np.arange(8.0)
np.split(a, 2)
>>>[array([ 0., 1., 2., 3.]), array([ 4., 5., 6., 7.])]
'머신러닝,마이닝' 카테고리의 다른 글
pandas 모듈 (2) (0) | 2020.10.20 |
---|---|
pandas 모듈 Series,DataFrame (0) | 2020.10.19 |
numpy모듈(2) 실습 (0) | 2020.09.28 |
Perceptron 신경망 (1) | 2020.09.18 |