본문 바로가기

Hello python!/Python_DA

파이썬 데이터분석_numpy변환(정렬, 참조, 복사)

20221020

12일차

 


 

 

만약 수의 개수가 많아졌을때 계산은 어떤 방식이 빠를까?

 

우리가 지금까지 애용하던 for반복문이 빠를까?

Numpy배열 계산(백터 연산)이 빠를까?

 

확인해 보자.

 


 

둘다 1억번의 계산을 돌린 결과이다.

 

결론은 for 반복문은 16.5초 백터연산은 57.4 밀리세컨드가 나왔다.

* 1s(초) = 1,000㎳

 

Numpy배열을 이용한 백터 계산이 훨~씬 빠르다는것을 알 수 있다.

 


array(배열) 또한 정렬을 할 수 있다.

하지만 리스트, 튜플 등의 자료형과 다른점은

배열이기 때문에 진행 방향을 설정 할 수 있다는 점이다.

 


0부터 5까지의  np.array(넘파이 배열)를 생성 했을 때

변수명을 x로 바꿔서 기본 파이썬 문법으로 순번을 뒤집을 수 있다.

 

 하지만 난수가 오는 배열은 어떨까

이는 항상 값이 바뀌기 때문에 넘파이 배열매서드를 적용 시켜야 한다.

 

 


np.sort() 매서드를 쓰면 난수 또한 배열을 바꿀 수 있다.

* np.sort()는 시뮬레이션 결과를 보여준다.

 

arr.sort()arr의 구조영구히 변경한다.

 

 


int로 이루어진 0~ 10 까지 이루어진 수 5개를 난수로 보여줬을때,

np.argsort()를 쓰면 해당 값이 오름차순 정렬을 위해 몇 번째 위치해야 하는지 보여준다.

 

 


만약 2차원 배열의 경우

 

여기부턴 진행 방향이 필요하다.

 

배열에서 방향은 Axis로 지시한다.

 

기본방향(행별정렬)은 Axis = -1 이다.

* Axis =1 또한 행별 정렬

 

Axis = 0

별로 정렬한다.

 


배열에서 인덱싱의 다른점은

차원을 구분해서 해야 한다는 것이다.

 

그래서 1차원1개의 인덱스 참조

2차원2개의 인덱스, 3차원3개의 인덱스를 참조한다.


 

1차원 배열을 만들어 인덱싱을 하는 과정이다.


 

1차원 데이터를 이용해 2차원 배열을 만들어서 인덱싱을 해보자.

 

2차원 배열에서는 하나의 값을 조회하기 위해2개의 인덱스를 참조하는것을 볼 수 있다.

 

* Numpy에서는 arr2[2,2] 가능!

 


여러개의 행과 열을 조회할 수 있고 특정 위치의 값을 조회할 수 있다.

 

 

인덱싱을 통해 값을 수정할 수 있다.

 

 


3차원은 간단히 사진으로 보겠다.

 

 

우선 3차원을 만들고

 

몇 번째 면의 몇 번째 행 몇번 열로 조회 가능하다.


 

당연히 값을 수정 할 수 도 있다.

 

 

* 3중 리스트를 입력시 2중리스트 요소를 반복


 

슬라이싱 또한 가능하다.

 

1차원 배열을 생성하면

기존의 리스트 슬라이싱처럼 사용가능하다.

 


 

2차원 배열의 슬라이싱을 보기 위해 배열을 만들어 준다.

 

특정 위치를 슬라이싱 할때 인덱싱 하는것을 잊지말자.

 

* 얕은복사를 하면 원본의 내용이 바뀐다.

 

 


 

조건 색인은 현업에서 아주 많이 쓰기 때문에 아주 중요하다고 들었다.

(별 다섯개 딱.대)

 

 

앞에서 썼던 2차원 배열을 이용해서 조회 해보자.

값이 True, False 로 표시되는 조건 색인도 있다.


 

원하는 값을 추출하기 위해

b[b에게 원하는 조건] 의 형태로 만들어주면

결과값을 보여준다.

 

* 조건을 여러개 넣을때는 ()으로 묶고 &(and) 혹은 /(or)로 연결해 준다.

 


 

깊은 복사의 개념과 얕은 복사의 개념을 기억하는가?

(난 기억 못했다..)

 

배열에서 다시 봐보자.

 

.copy() 메서드를 활용하면 깊은 복사가 이뤄진다.

 

arr3 = arr1 은 얕은 복사인데 왜 그런지 아래 과정을 봐보자.

 

arr2와 arr3에 100이라는 숫자로 대체 했을때

 

arr2는 값이 바로 바뀌고

 

arr3 = arr1 이기 때문에 둘 다 바뀌는것을 볼 수 있다.

 

* copy()의 출력값은 시뮬레이션을 보여준다