01_넘파이

1.넘피

  • 수학 및 과학 컴퓨팅 패키지
  • 성능: ndarray는 Python의 목록보다 빠릅니다.
  • 메모리 크기: ndarray는 파이썬 목록보다 적은 메모리를 사용합니다.
!pip install numpy

색인에서 검색: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ 요구 사항이 이미 충족됨: /usr/local/lib/python3.8/dist-packages(1.21.6)의 numpy

import numpy as np
np

1-1 열

  • 값 그룹
list1 = (1, 2, 3, 4)
list2 = ((1, 2, 3, 4), (5, 6, 7, 8))
print(list1)
print(type(list1))

print(list2)
print(type(list1))

(1, 2, 3, 4)

((1, 2, 3, 4), (5, 6, 7, 8))

arr = np.array((1, 2, 3, 4))
print(arr)
print(type(arr)) # < class 'numpy.ndarray'> = n dimension array

(1 2 3 4)

# 리스트를 ndarray로 생성하는 방법
arr1 = np.array(list1)
arr2 = np.array(list2)

print(arr1)
print(type(arr1))

print(arr2)
print(type(arr2))

(1 2 3 4)

((1 2 3 4)
(5 6 7 8))

1-2 배열 데이터 유형

  • 목록과 달리 ndarray는 단일 데이터 유형만 허용합니다.
list1 = (1, 3.14, 'Python', '🐇', True)
list1

(1, 3.14, ‘파이썬’, ”, 참)

list1(3)

arr1 = np.array((1, 2, 3, 4))
arr1

배열((1, 2, 3, 4))

arr2 = np.array((1, 2, 3.14, 4))
arr2
arr3 = np.array((1, 2, 3.14, True))
arr3

배열((1. , 2. , 3.14, 1. ))

arr4 = np.array((1, 2, 3.14, True, 'apple'))
arr4

array((‘1’, ‘2’, ‘3.14’, ‘참’, ‘사과’), dtype=”

arr3 = np.array((1, 2, 3.14, True), dtype=int)
arr3

배열((1, 2, 3, 1))

arr4 = np.array((1, 2, 3.14, True, '1234'), dtype=int)
arr4

————————————————– —————————————
NameError 역추적(마지막 호출 마지막)
~에
—-> 1 arr4 = np.array((1, 2, 3.14, Ture, ‘1234’), dtype=int)
2 도착4

NameError: 이름 ‘Ture’가 정의되지 않았습니다.

arr4 = np.array((1, 2, 3.14, True, '1234'), dtype=int)
arr4

배열 (( 1, 2, 3, 1, 1234))

1-3 인덱싱 및 슬라이싱

  • 어레이의 일부 선택
arr1 = np.array(('😁','🤣','😃','🍅','🍔'))
arr1.shape

(5,)

print(arr1(0))
print(arr1(4))
print(arr1(-1))
print(arr1(-2))




print(arr1(0:3))
print(arr1(2:))
print(arr1(:3))

(” ” ”)
(” ” ”)
(” ” ”)

arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d.shape

(3, 4)

arr2d(0, 2)

arr2d(2, 1)

10

# 0행을 가져오기
print(arr2d(0))
print(arr2d(0,))
print(arr2d(0,:))

(1 2 3 4)
(1 2 3 4)
(1 2 3 4)

# 0열을 가져오기
print(arr2d(:, 0))

(159)

arr2d(:2, :)

배열(((1, 2, 3, 4),
(5, 6, 7, 8)))

arr2d(:2, 2:)

배열(((3, 4),
(7, 8)))

1-4 멋진 인덱싱

  • 범위가 아닌 특정 인덱스의 지정된 값을 선택하여 추출하고자 할 때 사용
arr1 = np.array((10, 23, 2, 6, 90, 85, 32, 66, 80))
idx = (1, 4, 6)
arr1(idx)

배열((23, 90, 32))

arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d((0, 1), :)

배열(((1, 2, 3, 4),
(5, 6, 7, 8)))

1-5 부울 인덱싱

  • 조건부 필터링에 의한 부울 값 인덱스
arr1 = np.array(('😁','🤣','😃','🍅','🍔'))
selValue = (True, True, False, False, True)
arr1(selValue)

배열((”, ”, ”), dtype=”

selValue = (True, True, True, True)
arr1(selValue)  # IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 4
arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d > 7

배열(((거짓, 거짓, 거짓, 거짓),
(거짓, 거짓, 거짓, 참),
(참, 참, 참, 참))))

arr2d < 5

배열((( 참, 참, 참, 참),
(틀렸어, 틀렸어, 틀렸어, 틀렸어),
(틀렸어, 틀렸어, 틀렸어, 틀렸어))))

arr2d(arr2d > 7)

배열 (( 8, 9, 10, 11, 12))

arr2d(arr2d < 5)

배열((1, 2, 3, 4))

2. 행렬 연산

2-1 운영자

# 덧셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2, 3), (2, 3, 4)))
print(a.shape)
print(b.shape)

(2, 3)
(2, 3)

# shape가 같아야 함
# 같은 position끼리 연산

a + b
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((3, 4), (1, 2)))
print(a. shape)
print(b. shape)

(2, 3)
(2, 2)

a + b # ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
# 뺄셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2, 3), (2, 3, 4)))

a - b

배열(((0, 0, 0),
(0, 0, 0)))

# 나눗셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((4, 5, 6), (1, 2, 3)))

a / b

배열(((0.25, 0.4, 0.5),
(2. , 1.5 , 1.33333333)))

# 내적(dot product)
# 맞닿는 shape가 같아야 함
# 결과 행렬은 떨어져있는 shape의 형태와 같아야 함
a = np.array(((1, 2, 3), (1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2), (3, 4), (5, 6)))

# 맞닿는 shape가 같아야함 ex ) (3,3) (3,2) = (3,2) 내부 맞닿는 3이 같아야함

'''
1 2 3       1 2
1 2 3       3 4
2 3 4       5 6
'''
a.shape, b.shape

((3, 3), (3, 2))

print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((2*1 + 3*3 + 4*5), (2*2 + 3*4 + 4*6))

22 28
22 28
31 40

np.dot(a, b)

배열(((22, 28),
(22, 28),
(31, 40)))

2-2 마련하다

  • 순차 값을 생성하는 데 사용
arr1 = range(1, 11)
arr1

지역(1, 11)

for i in arr1:
    print(i, end=' ')

1 2 3 4 5 6 7 8 9 10

arr2 = np.arange(1, 11)
arr2

배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

for i in arr2:
    print(i, end=' ')

1 2 3 4 5 6 7 8 9 10

2-3 정렬 기준

arr1 = np.array((1, 10, 5, 7, 2, 4, 3, 6, 8, 9))
arr1

배열((1, 10, 5, 7, 2, 4, 3, 6, 8, 9))

np.sort(arr1) # 기본값은 오름차순

배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

np.sort(arr1)(::-1) # 내림차순

배열((10, 9, 8, 7, 6, 5, 4, 3, 2, 1))

li1 = (1, 10, 5, 7, 2, 4, 3, 6, 8, 9)
li1.sort()
li1 # 정렬된 결과를 유지

(1 2 3 4 5 6 7 8 9 10)

result = np.sort(arr1)
result

배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

arr2d = np.array(((11, 10, 12, 9),
                  (3, 1, 4, 2),
                  (5, 6, 7, 8)))
arr2d.shape

(3, 4)

#행 정렬
np. sort(arr2d, axis=0) # axis = 0: 행

배열((( 3, 1, 4, 2),
(5, 6, 7, 8),
(11, 10, 12, 9)))

#열 정렬
np.sort(arr2d, axis=1) # axis = 0: 열

배열((( 9, 10, 11, 12),
(1, 2, 3, 4),
(5, 6, 7, 8)))

# 축의 마지막 방향
np.sort(arr2d, axis=-1) # axis = -1: 축이 많을 경우 마지막 축의 값을 설정

배열((( 9, 10, 11, 12),
(1, 2, 3, 4),
(5, 6, 7, 8)))

2-4 숫자의 단일 연산

a = np.array(((1, 2, 3), (4, 5, 6)))
b = np.array(((3, 3, 3), (3, 3, 3)))
a + b

배열(((4, 5, 6),
(7, 8, 9)))

a + 3

배열(((4, 5, 6),
(7, 8, 9)))

a - 3

배열(((-2, -1, 0),
(1, 2, 3)))

a * 3

배열((( 3, 6, 9),
(12, 15, 18)))

a / 3

배열(((0.33333333, 0.66666667, 1. ),
(1.33333333, 1.66666667, 2. )))