๐Ÿ“•Week3 day2(Numpy ์‹ค์Šต์˜ˆ์ œ2)

๋ฐ•์ค€ํฌยท2023๋…„ 9์›” 5์ผ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
15/28
post-thumbnail

Numpy ์‹ค์Šต ์˜ˆ์ œ2


๐Ÿ“Œ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…

๊ฐ™์€ ์ฐจ์›์˜ ๋‹ค๋ฅธ ๋ชจ์–‘

๊ฐ™์€ ์ฐจ์›์ด์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ์–‘์„ ๊ฐ€์ง„ ๋ฐฐ์—ด ๊ฐ„์˜ ์—ฐ์‚ฐ์—์„œ ์–ด๋–ป๊ฒŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

2์ฐจ์› ๋ฐฐ์—ด(ํ–‰๋ ฌ) ๊ฐ„์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์„ ํ•ด๋ด…์‹œ๋‹ค. ์˜ˆ์‹œ๋กœ 3 x 3 ๋ฐฐ์—ด(A)๊ณผ 1 x 3 ๋ฐฐ์—ด(B) ์‚ฌ์ด์— ๋ง์…ˆ ์—ฐ์‚ฐ, ๊ทธ๋ฆฌ๊ณ  3 x 3 ๋ฐฐ์—ด(A)๊ณผ 2 x 3 ๋ฐฐ์—ด(C) ์‚ฌ์ด์— ๋ง์…ˆ ์—ฐ์‚ฐ์„ ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

A = [
    [10, 10, 10],
    [20, 20, 20],
    [30, 30, 30]
]
B = [
    [1, 2, 3]
]
C = [
    [2, 2, 3],
    [4, 5, 6],
]
A = np.array(A)
B = np.array(B)
C = np.array(C)
result = A + B
print(result)
>>>[[11 12 13]
 [21 22 23]
 [31 32 33]]

result = A + C
>>>ValueError: operands could not be broadcast together with shapes (3,3) (2,3)

์œ„ ์ฝ”๋“œ์—์„œ A + B๋ฅผ ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1 x 3 ๋ฐฐ์—ด B๋Š” 3 x 3 ๋ฐฐ์—ด A ๋ชจ์–‘์˜ ๋งž์ถฐ 0์ฐจ์›์„ ๊ธฐ์ค€์œผ๋กœ ํ™•์žฅ(1->3)ํ•˜์—ฌ ์—ฐ์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ 2 x 3 ๋ฐฐ์—ด C๋Š” 3 x 3 ๋ฐฐ์—ด A ๋ชจ์–‘์— ๋งž์ถ”์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 1์ผ ๋•Œ๋งŒ ์ ์šฉ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ B๋Š” 0์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 1์ด์—ฌ์„œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋˜์ง€๋งŒ, C๋Š” 0์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 2์ด๋ฏ€๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ 1 x 3 ๋ฐฐ์—ด๊ณผ 3 x 1 ๋ฐฐ์—ด์˜ ์—ฐ์‚ฐ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

A = [
    [1],
    [2],
    [3]
]
B = [
    [1, 2, 3]
]
A = np.array(A)
B = np.array(B)
result = A + B
print(result)
>>>[[2 3 4]
 [3 4 5]
 [4 5 6]]


1 x 3 ๋ฐฐ์—ด B๋Š” A์˜ 0์ฐจ์›์˜ ํฌ๊ธฐ์ธ 3์— ๋งž์ถฐ, 3 x 1 ๋ฐฐ์—ด A๋Š” B์˜ 1์ฐจ์›์˜ ํฌ๊ธฐ 3์— ๋งž์ถฐ ํ™•์žฅํ•˜๋ฉฐ ์ตœ์ข… 3 x 3 ๋ฐฐ์—ด๋กœ ์—ฐ์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์—ฐ์‚ฐ์„ ํ•  ๋ฐฐ์—ด์—์„œ ํฌ๊ธฐ๊ฐ€ 1์ธ ์ฐจ์›์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋˜์–ด ๋‹ค๋ฅธ ๋ฐฐ์—ด์—์„œ ํ•ด๋‹น ์ฐจ์›์˜ ํฌ๊ธฐ๋งŒํผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ฐจ์›์˜ ๋ฐฐ์—ด

์ฐจ์›์ด ๋‹ค๋ฅธ ๋ฐฐ์—ด๋“ค ๊ฐ„์˜ ์—ฐ์‚ฐ์„ ํ•  ๋•Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ์‚ดํŽด์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ฐจ์›์˜ ๋ฐฐ์—ด๋“ค ๊ฐ„์˜ ์—ฐ์‚ฐ์„ ํ•ด๋ด…์‹œ๋‹ค. ์˜ˆ์‹œ๋กœ 2 x 1 x 3 ๋ชจ์–‘์„ ๊ฐ€์ง„ 3์ฐจ์› ๋ฐฐ์—ด(A)๊ณผ 2 x 3 ๋ชจ์–‘์„ ๊ฐ€์ง„ 2์ฐจ์› ๋ฐฐ์—ด(B) ์‚ฌ์ด์— ๋ง์…ˆ ์—ฐ์‚ฐ, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด(A)๊ณผ 1 x 2 ๋ชจ์–‘์„ ๊ฐ€์ง„ 2์ฐจ์›์˜ ๋ฐฐ์—ด(C) ์‚ฌ์ด์— ๋ง์…ˆ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# 2 x 1 x 3 ๋ชจ์–‘์˜ ๋ฐฐ์—ด A
A = np.array(
    [[[3, 2, 1]],
     [[0, 1, 3]]]
)
# 2 x 3 ๋ชจ์–‘์˜ ๋ฐฐ์—ด B
B = np.array(
    [[0, 2, 1],
     [2, 2, 3]]
)
# 2 ๋ชจ์–‘์˜ ๋ฐฐ์—ด C
C = np.array([[1, 2]])

result = A + B
print(result)
>>>[[[3 4 2]
  [5 4 4]]

 [[0 3 4]
  [2 3 6]]]

result = A + C
>>>ValueError: operands could not be broadcast together with shapes (2,1,3) (1,2)


a. 2 x 3 ๋ชจ์–‘์„ ๊ฐ€์ง„ 2์ฐจ์› ๋ฐฐ์—ด B๋Š” 0์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 2, 1์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 3์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 2 x 1 x 3 ๋ชจ์–‘์„ ๊ฐ€์ง„ 3์ฐจ์›์˜ ๋ฐฐ์—ด A์— ๋งž์ถฐ 3์ฐจ์›์œผ๋กœ ํ™•์žฅ๋˜๋ฉด 0์ฐจ์›์—๋Š” ๋ฐฐ์—ด A์˜ 0์ฐจ์› ํฌ๊ธฐ์ธ 2๊ฐ€ ๋˜๊ณ , 1์ฐจ์›์—๋Š” ๊ธฐ์กด ๋ฐฐ์—ด์˜ 0์ฐจ์› ํฌ๊ธฐ(2)๊ฐ€, 2์ฐจ์›์—๋Š” ๊ธฐ์กด ๋ฐฐ์—ด์˜ 1์ฐจ์› ํฌ๊ธฐ(3)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


b. ๊ทธ๋ฆฌ๊ณ  ์•ž์„  ์‹ค์Šต์—์„œ ํ™•์ธํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐฐ์—ด A์˜ 1์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 1์ด๋ฏ€๋กœ ๋ฐฐ์—ด B์˜ 1์ฐจ์›์˜ ํฌ๊ธฐ์— ๋งž์ถฐ 2๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ A + C์˜ ๊ฒฝ์šฐ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋  ๋•Œ ๋งˆ์ง€๋ง‰ ์ฐจ์›๋ถ€ํ„ฐ ๋งž์ถฐ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด A์˜ 2์ฐจ์›์˜ ํฌ๊ธฐ์ธ 3๊ณผ C์˜ 1์ฐจ์›์˜ ํฌ๊ธฐ์ธ 2๊ฐ€ ๋งž์ง€ ์•Š์•„ ๋ฐœ์ƒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด ๊ฐ„ ์—ฐ์‚ฐ์—์„œ ์„œ๋กœ ์ฐจ์›์ด ๋งž์ง€ ์•Š๋”๋ผ๋„ A + B์™€ ๊ฐ™์ด ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฐจ์›์˜ ์ง์ด ์ผ์น˜ํ•˜๋ฉด ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œany(), all()

any()๋ฉ”์„œ๋“œ

any()๋ฉ”์†Œ๋“œ๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์— True๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , True๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

A = np.array([1, 2, 3, 4, 5, 4, 3, 2, 1])
print(A >= 4)
>>>[False False False  True  True  True False False False]

print((A >= 4).any())
>>>True

๋ฐฐ์—ด A์—๋Š” 4 ์ด์ƒ์˜ ์ˆ˜๊ฐ€ 4, 5, 4๋กœ ์ด 3๊ฐœ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์— ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 4 ์ด์ƒ์˜ ์ˆ˜๋Š” True, 4 ๋ฏธ๋งŒ์˜ ์ˆ˜๋Š” False์ธ ๋ฐฐ์—ด์„ ์–ป์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ any()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•˜๋‚˜๋ผ๋„ True๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์œ„ A์—์„œ ๊ด€๊ณ„ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์–ป์€ ๋ฐฐ์—ด์—๋Š” 1๊ฐœ ์ด์ƒ(3๊ฐœ)์˜ True๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ any()๋ฉ”์†Œ๋“œ์˜ ๊ฒฐ๊ณผ๋Š” True๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.

all()๋ฉ”์„œ๋“œ

all()๋ฉ”์†Œ๋“œ๋Š” ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ True๋ผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ•˜๋‚˜๋ผ๋„ False๊ฐ€ ์žˆ๋‹ค๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

A = np.array([1, 2, 3, 4, 5, 4, 3, 2, 1])
print(A >= 4)
>>>[False False False  True  True  True False False False]

print((A >= 4).all())
>>>False

any()๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ๋‹ค๋ฅด๊ฒŒ False๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, any()๋Š” ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž๋กœ ์—ฐ์‚ฐํ•œ ๋ฐฐ์—ด์— True๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— True๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ all()๋Š” ๋ชจ๋“  ์š”์†Œ๊ฐ€ True๊ฐ€ ์•„๋‹ˆ๊ณ  False์ธ ์š”์†Œ๋“ค๋„ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— False๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ์‹ฌํ™”๋ฌธ์ œ

๐Ÿ“์‹ฌํ™”๋ฌธ์ œ1 - ์ง€๋ขฐ์ฐพ๊ธฐ

  • ๋ฌธ์ œํ’€์ด
    ์Šฌ๋ผ์ด์‹ฑ์„ ์ด์šฉํ•ด ๊ฐ ๊ตฌ์—ญ์— ์ ‘๊ทผํ•œ ํ›„ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ํ’€์ด ์ฝ”๋“œ

def solution(board, bombs):
    board[0:5,0:5][board[0:5,0:5]==bombs[0]] = 0
    board[0:5,5:10][board[0:5,5:10]==bombs[1]] = 0
    board[5:10,0:5][board[5:10,0:5]==bombs[2]] = 0
    board[5:10,5:10][board[5:10,5:10]==bombs[3]] = 0
    answer = board
    return answer

๐Ÿ“์‹ฌํ™”๋ฌธ์ œ2 - ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ

  • ๋ฌธ์ œํ’€์ด
    ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ์˜ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋Š” ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๋‚˜๋ˆ„๊ณ  np.matmul()์„ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํ’€์ด ์ฝ”๋“œ

def solution(data, data_filter):
    answer = np.matmul(data, data_filter/len(data))#๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ์‚ฌ์šฉ
    return answer

๐Ÿ“์‹ฌํ™”๋ฌธ์ œ3 - 2022 ๊ทธ๋ ™๋Œ€ํ•™๊ต ๋ชจ์ง‘

  • ๋ฌธ์ œ ํ’€์ด
    ๊ฐ ์ „ํ˜•๋ณ„๋กœ ์ตœ์ข…์ ์ˆ˜ ๊ณ„์‚ฐ์˜ ํ•„์š”ํ•œ ์ƒ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ ํ›„ if๋ฌธ์„ ํ†ตํ•ด ๋ฒˆํ˜ธ๋งˆ๋‹ค ์–ด๋–ค ์ „ํ˜•์„ ์ง€์›ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ์•ž์—์„œ ๋งŒ๋“  ์ƒ์ˆ˜ ๋ฐฐ์—ด๊ณผ data ๋ฐฐ์—ด์„ ์Šฌ๋ผ์ด์‹ฑํ•œ ๊ฐ’์„ np.dot์„ ํ†ตํ•ด ์ตœ์ข… ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    ๋งˆ์ง€๋ง‰์œผ๋กœ ์ตœ์ข… ์ ์ˆ˜๊ฐ€ ๊ฐ ํ•ฉ๊ฒฉ ๊ธฐ์ค€ ์ ์ˆ˜๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด ์ •๋‹ต ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ํ’€์ด ์ฝ”๋“œ

def solution(data):
    answer = []
    test1 = np.array([0.3,0.3,0.4])
    test2 = np.array([0.5,0.15,0.2,0.15])
    test3 = np.array([0.3,0.4,0.3])
    
    for student in data:
        if student[1] == 0:
            if np.dot(test1, student[2:5]) >= 0.8:
                answer.append(int(student[0]))
        elif student[1] == 1:
            if np.dot(test2, student[5:9]) >= 0.75:
                answer.append(int(student[0]))
        elif student[1] == 2: 
            if np.dot(test3, student[6:9]) >= 0.75:
                answer.append(int(student[0]))
    return answer

๋~!


profile
๊ฒŒ์„๋ €๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€