본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python 자료구조(6) (array)

728x90
반응형

https://metime.tistory.com/312

 

[복습] Python 자료구조(5) (array)

https://metime.tistory.com/307 [복습] Python 자료구조(4) (array) - 다차원 - 단 하나의 데이터 타입만 허용(수치연산) - 일상적으로는 잘 사용하지 않으나(데이터프레임 사용), 딥러닝 코드 구현시 사용 1. 생

metime.tistory.com

 

위 게시글에 이어 마지막 array 정리이다.

 

 

 

1. 생성

2. 주요메서드

3. 색인

4. 3차원 배열의 연산

까지 위 링크에 정리했다.

 

 

 

5. 변경(행 추가, 열 추가)

  - np.vstack, np.hstack

 

 

예) 행 추가(결합)

pd.concat을 사용하여  a1과 a2를 결합하고자 한다.

 

 

함수는 원래 안에 들어가는 객체가 어떤 것이 와도 상관이 없는데 여기서는 에러 메시지 일부 중에 only Series and Dataframe 이라고 나온다. 즉 array는 concat으로 전달이 불가하다.

 

pd.concat을 사용하겠다면 아래와 같이 사용할 수 있겠으나 속도 측면에서 비효율적이라 권장하는 방법은 아니다.

 

 

np.vstack 을 사용하여 리스트나 튜플로 묶으면 표현이 가능하다.

array의 행추가/열추가는 각각 np.vstack, np.hstack 을 기억해두자.

 

np.concatenate를 사용해서도 표현이 가능하다.

 

 

 

예) 컬럼 추가(결합)

아래 두 array를 가로방향으로 결합하여라.

 

 

이렇게 np.hstack을 사용하거나 또는 

 

np.concatenate로도 가능하다.

 

 

 

 

6. 연산(broadcast)

  - 작은 쪽 배열을 행별, 열별 반복

  -  두 가지 조건이 성립하여야 한다.

    1) 양 객체의 같은 방향의 크기 공유(행 사이즈가 서로 같거나 열 사이즈가 서로 같아야 함)

    2) 더 작은 쪽 객체의 공유하지 않는 쪽의 크기가 1이어야 함

 

위와 같은 배열이 정의되어있다.

 

 

a1+ a2는 에러가 난다.

더 작은 쪽의 객체의 공유하지 않는 쪽의 크기가 1이 되지 않기 때문에 broadcast가 되지 않았다.

 

a1+a5는 다음과 같이 계산된다.

 

 

아래와 같은 array를 생성해보았다.

 

 

그리고 a1+a6 를 시도했을 때 에러가 났다. 

행과 열의 구성을 살펴보면 4X5, 1X4여서 불가하기 때문이다. 

대신 a6을 reshape 하면 가능하다.

 

 

 4X5와 4X1 의 연산으로 바뀌기 때문에 broadcast가 가능해진다.

 

 

 

 

 

728x90

 

 

 

반복 가능한 객체끼리의 연산

위에서 a1+a2는 불가함을 확인하였다.

 

a2가 a1 위 아래로 두 번 배치되어 계산되도록 유도하고자 한다.

그 때에는 np.tile 이라는 함수를 사용하면 되겠다.

 

a2를 np.tile 함수를 적용시키면, 행 방향으로 두 번 반복되는 개념이 된다.

 

따라서 이렇게 적용한 결과를  a1과 합하면 다음과 같다.

 

 

 

예) 6X8 + 2X2

행 방향 세 번 컬럼 방향 네 번 확장되도록 만들면 두 배열의 합이 가능하다.

728x90
반응형