!pip install numpy
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (1.21.6)
import numpy as np
np
<module 'numpy' from '/usr/local/lib/python3.8/dist-packages/numpy/__init__.py'>
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]
<class 'list'>
[[1, 2, 3, 4], [5, 6, 7, 8]]
<class 'list'>
arr = np.array([1, 2, 3, 4])
print(arr)
print(type(arr)) # < class 'numpy.ndarray'> = n dimension array
[1 2 3 4]
<class 'numpy.ndarray'>
# 리스트를 ndarray로 생성하는 방법
arr1 = np.array(list1)
arr2 = np.array(list2)
print(arr1)
print(type(arr1))
print(arr2)
print(type(arr2))
[1 2 3 4]
<class 'numpy.ndarray'>
[[1 2 3 4]
[5 6 7 8]]
<class 'numpy.ndarray'>
list1 = [1, 3.14, 'Python', '🐇', True]
list1
[1, 3.14, 'Python', '🐇', True]
list1[3]
🐇
arr1 = np.array([1, 2, 3, 4])
arr1
array([1, 2, 3, 4])
arr2 = np.array([1, 2, 3.14, 4])
arr2
arr3 = np.array([1, 2, 3.14, True])
arr3
array([1. , 2. , 3.14, 1. ])
arr4 = np.array([1, 2, 3.14, True, 'apple'])
arr4
array(['1', '2', '3.14', 'True', 'apple'], dtype='<U32')
arr3 = np.array([1, 2, 3.14, True], dtype=int)
arr3
array([1, 2, 3, 1])
arr4 = np.array([1, 2, 3.14, True, '1234'], dtype=int)
arr4
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-18-10df8e8c591c> in <module>
----> 1 arr4 = np.array([1, 2, 3.14, Ture, '1234'], dtype=int)
2 arr4
NameError: name 'Ture' is not defined
arr4 = np.array([1, 2, 3.14, True, '1234'], dtype=int)
arr4
array([ 1, 2, 3, 1, 1234])
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]
3
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])
[1 5 9]
arr2d[:2, :]
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr2d[:2, 2:]
array([[3, 4],
[7, 8]])
arr1 = np.array([10, 23, 2, 6, 90, 85, 32, 66, 80])
idx = [1, 4, 6]
arr1[idx]
array([23, 90, 32])
arr2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
arr2d[[0, 1], :]
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr1 = np.array(['😁','🤣','😃','🍅','🍔'])
selValue = [True, True, False, False, True]
arr1[selValue]
array(['😁', '🤣', '🍔'], dtype='<U1')
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
array([[False, False, False, False],
[False, False, False, True],
[ True, True, True, True]])
arr2d < 5
array([[ True, True, True, True],
[False, False, False, False],
[False, False, False, False]])
arr2d[arr2d > 7]
array([ 8, 9, 10, 11, 12])
arr2d[arr2d < 5]
array([1, 2, 3, 4])
# 덧셈 연산
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
array([[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
array([[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)
array([[22, 28],
[22, 28],
[31, 40]])
arr1 = range(1, 11)
arr1
range(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
array([ 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
arr1 = np.array([1, 10, 5, 7, 2, 4, 3, 6, 8, 9])
arr1
array([ 1, 10, 5, 7, 2, 4, 3, 6, 8, 9])
np.sort(arr1) # 기본값은 오름차순
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
np.sort(arr1)[::-1] # 내림차순
array([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
array([ 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: 행
array([[ 3, 1, 4, 2],
[ 5, 6, 7, 8],
[11, 10, 12, 9]])
#열 정렬
np.sort(arr2d, axis=1) # axis = 0: 열
array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
# 축의 마지막 방향
np.sort(arr2d, axis=-1) # axis = -1: 축이 많을 경우 마지막 축의 값을 설정
array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[3, 3, 3], [3, 3, 3]])
a + b
array([[4, 5, 6],
[7, 8, 9]])
a + 3
array([[4, 5, 6],
[7, 8, 9]])
a - 3
array([[-2, -1, 0],
[ 1, 2, 3]])
a * 3
array([[ 3, 6, 9],
[12, 15, 18]])
a / 3
array([[0.33333333, 0.66666667, 1. ],
[1.33333333, 1.66666667, 2. ]])