내 잡다한 노트

numpy 배열 연산, 접근법 본문

Language/Python

numpy 배열 연산, 접근법

peanutwalnut 2023. 4. 4. 23:58

a라는 (2, 3) shape를 가진 배열이 있다고 가정.

 

# 배열의 사칙연산

a +-*/ value 사칙연산은 a의 모든 값에 사칙연산이 된다.

 

# 배열끼리 연산

b와 c라는 크기가 같은 배열이 있을때, 두 배열을 사칙연산을 한다면,

같은 위치의 요소끼리 사칙연산이 된다.

 

위에 나온 배열들은 크기가 같을때를 가정한 것이고, 만약 크기가 다르다면???

그래도 연산을 수행할 수 있다.

브로드캐스팅 덕분인데, 이건 dimension을 추가하거나 array를 복제하여 호환되도록 

해서 다양한 모양의 array가 작업에서 함께 작동하도록 만드는 방법이다.

 

예를 들어 3x3 배열 A와 1x3 배열 B가 있는 경우 브로드캐스팅을 사용하여 함께 추가할 수 있습니다. NumPy는 'A'의 모양과 일치하도록 첫 번째 차원을 따라 'B' 배열을 세 번 자동으로 복제합니다.

 

import numpy as np
A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
B = np.array([10, 20, 30])
C = A + B
print(C)

 

결과

array([[11, 22, 33],
       [14, 25, 36],
       [17, 28, 39]])

 

브로드캐스팅이 불가능하거나 예상치 못한 결과를 초래하는 경우도 있으니 브로드캐스팅에

더 알아봐야 할 것 같다.

 

# 접근법

배열 요소에 접근법은 파이썬 리스트의 인덱스 접근법과 유사하다.

 

1차원은 다 알 것 같으니 넘어가고...

 

# 2차원 배열

b = [[1, 2, 3], [3, 4, 5]] 라는 numpy array가 있을 때, 두 가지 방식이 있다.

b[1][2]와 b[1, 2]. 둘 다 결과는 같다. 하지만 속도에서 차이가 난다.

 

이중 괄호 표기법은 원하는 요소에 액세스하기 전에 중간 배열 객체를 생성하는 반면 단일 괄호 표기법은 요소에 직접 액세스하기 때문입니다. 따라서 b[1,2] 요소에 액세스하는 것은 하나의 인덱싱 작업만 필요하므로 b[1][2] 요소에 액세스하려면 두 개의 인덱싱 작업이 필요하므로 더 빠르다.

 

여러 값을 가져오고 싶을때도 파이썬에서 하던 것처럼 하면 된다.

b의 2행을 가져오고 싶다면 b[1:2, 0:3]