In [1]:
from IPython.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>"))
# 코드 입력창의 너비를 조정하는 코드입니다.
넘파이의 Broadcasting¶
넘파이에는 브로드캐스팅이란 기능이 있는데
조건을 만족하는 배열끼리 짝을 맞춰 연산하는 기능이다.
1. 원소가 하나인 경우, 어떤 배열이나 브로드캐스팅이 가능
2. 하나의 배열이 1차원 배열인 경우, 브로드캐스팅이 가능
3. 서로 모양이 같은 경우, 브로드 캐스팅이 가능
4. 차원의 짝이 맞을 때, 브로드 캐스팅이 가능
ex) arr1.shape = (3, 1) arr2.shape = (1, 3) 일 때, 연산결과는 (3, 3)
1차원 배열 연산¶
In [2]:
import numpy as np
In [3]:
x = np.random.randint(1, 10, 4)
In [4]:
y = np.random.randint(1, 100, 4)
In [5]:
x
Out[5]:
array([3, 9, 8, 9])
In [6]:
y
Out[6]:
array([30, 50, 61, 83])
In [7]:
x + y
Out[7]:
array([33, 59, 69, 92])
In [8]:
x - y
Out[8]:
array([-27, -41, -53, -74])
In [9]:
x * y
Out[9]:
array([ 90, 450, 488, 747])
참고로 리스트의 경우, + 연산만 존재하고 리스트를 이어 붙인다.¶
In [11]:
# 리스트의 경우
In [12]:
a = [1, 4, 2, 3]
In [13]:
b= [11, 44, 22, 33]
In [14]:
a + b
Out[14]:
[1, 4, 2, 3, 11, 44, 22, 33]
In [15]:
a - b
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In [15], line 1 ----> 1 a - b TypeError: unsupported operand type(s) for -: 'list' and 'list'
In [16]:
a * b
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In [16], line 1 ----> 1 a * b TypeError: can't multiply sequence by non-int of type 'list'
In [17]:
a / b
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In [17], line 1 ----> 1 a / b TypeError: unsupported operand type(s) for /: 'list' and 'list'
2차원 배열 연산¶
In [18]:
P = np.random.randint(1, 10, (3, 2))
In [19]:
Q = np.random.randint(10, 100, (3, 2))
In [20]:
P
Out[20]:
array([[6, 6], [7, 7], [4, 7]])
In [21]:
Q
Out[21]:
array([[28, 28], [41, 35], [83, 60]])
In [22]:
P + Q
Out[22]:
array([[34, 34], [48, 42], [87, 67]])
In [23]:
P - Q
Out[23]:
array([[-22, -22], [-34, -28], [-79, -53]])
In [24]:
P * Q
Out[24]:
array([[168, 168], [287, 245], [332, 420]])
In [25]:
P / Q
Out[25]:
array([[0.21428571, 0.21428571], [0.17073171, 0.2 ], [0.04819277, 0.11666667]])
In [80]:
# 학생들 점수가 있습니다. [56, 75, 88, 92, 66]
# 이 학생들의 점수가 잘못 되어서, -5점씩 한 점수로 바꿔야 합니다.
In [ ]:
# 1. 리스트의 경우
In [26]:
score_list = [56, 75, 88, 92, 66]
In [27]:
new_score_list = []
In [28]:
for score in score_list:
new_score = score - 5
new_score_list.append(new_score)
In [29]:
new_score_list
Out[29]:
[51, 70, 83, 87, 61]
In [ ]:
# 2. ndarray의 경우
In [30]:
score_array = np.array([56, 75, 88, 92, 66])
In [31]:
new_score_array = score_array - 5
In [32]:
new_score_array
Out[32]:
array([51, 70, 83, 87, 61])
'Python > Numpy' 카테고리의 다른 글
Numpy Boolean 조건문으로 배열 인덱싱(Boolean Indexing) (0) | 2022.11.24 |
---|---|
Numpy ndarray의 데이터 accessing, slicing (0) | 2022.11.24 |
Numpy의 축(axis) 연산 (0) | 2022.11.23 |
Numpy의 난수 배열 생성 random, randint (0) | 2022.11.23 |
Numpy의 배열 생성 arange, linspace, reshape (0) | 2022.11.23 |