비전공개미 개발노트
python 5일차 - NumPy 본문
반응형
SMALL
In [ ]:
'''
Numpy : Numerical Python
벡터, 행렬(매트릭스) 계산하는 용도의 module
'''
In [1]:
import numpy as np
In [11]:
a = np.array([1, 2, 3])
a
a * 3 # 기존 배열의 3개 반복이 아닌 곱하기 3의 값이 들어간다
a[0]
Out[11]:
1
In [12]:
b = np.array([2, 2, 1])
a / a
Out[12]:
array([1., 1., 1.])
In [14]:
np.dot(a, b) # 1*2 + 2*2 + 3*1 = 9 / 각 배열 순서를 곱한값을 전부 더한값
Out[14]:
9
In [18]:
c = range(10)
print(c)
d = np.arange(10)
print(d)
d = np.arange(0, 10, 2)
print(d)
range(0, 10)
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
In [22]:
d = np.linspace(1, 10, 10) # 1 ~ 10까지 10등분 해라
d
Out[22]:
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
In [23]:
d = np.linspace(1, 10, 15) # 1 ~ 10까지 15등분 해라
d
Out[23]:
array([ 1. , 1.64285714, 2.28571429, 2.92857143, 3.57142857,
4.21428571, 4.85714286, 5.5 , 6.14285714, 6.78571429,
7.42857143, 8.07142857, 8.71428571, 9.35714286, 10. ])
In [30]:
c = [
[1, 2, 3],
[4, 5, 6]
]
print(c[0][0])
print(c[1][1])
# Numpy
c = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(c[0][0])
c.shape # 큰배열 2개 안에 값이 3개
1
5
1
Out[30]:
(2, 3)
In [34]:
d = np.sum(c) # 전체의 합계를 구해준다
print(d)
d = np.sum(c, axis=1) # 하나의 축을 가리킨다 1번째 축 합계, 2번째 축 합계
d
21
Out[34]:
array([ 6, 15])
In [37]:
d = c.reshape(3, 2) # 배열의 축을 변경 / 3개의 배열에 2개의 값을 넣어서 출력
d
Out[37]:
array([[1, 2],
[3, 4],
[5, 6]])
In [41]:
d = c.reshape(6, 1) # 2차원 배열
d
Out[41]:
array([[1],
[2],
[3],
[4],
[5],
[6]])
In [43]:
# 2차원 -> 1차원 배열로 변경
d = c.reshape(6, )
d
Out[43]:
array([1, 2, 3, 4, 5, 6])
In [45]:
d = c.T # T : 축을 변경
d
Out[45]:
array([[1, 4],
[2, 5],
[3, 6]])
In [50]:
d = d.T # 축을 변경한것을 되돌리기 -> 재출력
d
Out[50]:
array([[1, 2, 3],
[4, 5, 6]])
In [51]:
d = np.transpose(c)
d
Out[51]:
array([[1, 4],
[2, 5],
[3, 6]])
random¶
In [57]:
d = np.random.randn() # 정규분포에서 랜덤값을 가져온다
d
Out[57]:
-0.7618575113790881
In [80]:
d = np.random.rand() # 0 ~ 1사이의 랜덤값
d
Out[80]:
0.6925339054907893
In [81]:
d = np.random.randn(2, 3) # 큰묶음2개 안에 요소3개의 배열을 생성
d
Out[81]:
array([[-0.91828701, 0.87117892, -0.76993539],
[-0.1333141 , -0.33982538, 0.33031695]])
In [85]:
d[0, 0] # == d[0][0]과 동일함
Out[85]:
-0.9182870125977343
In [86]:
d = np.array([0, 5, 2, 7, 1, 9])
d[1:5] # 1번지 부터 5번지 전까지
Out[86]:
array([5, 2, 7, 1])
In [87]:
d[0:5:2] # 0번지에서 5번지 전까지 2번지 띄워서 출력
Out[87]:
array([0, 2, 1])
In [88]:
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6]])
In [89]:
a.data # 메모리 할당주소
Out[89]:
<memory at 0x000002B16D0DDD00>
In [90]:
b.flags
# https://runebook.dev/ko/docs/numpy/reference/generated/numpy.ndarray.flags 주소내 정보참고
Out[90]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
In [91]:
a.size # size : 최종 길이값
Out[91]:
3
In [93]:
b.size
Out[93]:
6
In [94]:
a.shape # shape : 차원을 볼 수 있다
Out[94]:
(3,)
In [95]:
b.shape
Out[95]:
(2, 3)
In [96]:
a.flat[0]
Out[96]:
1
In [98]:
b.flat[4] # flat : 총 길이의 5번지 출력
Out[98]:
5
In [101]:
d = np.array([[[2, 3, 4], [2, 2, 2], [4, 3, 2],[5, 7, 1]]])
d.shape # 차원을 볼 수 있다 / [대[중[소]]]의 갯수를 출력
Out[101]:
(1, 4, 3)
In [102]:
d.ndim # ndim : 차원을 출력 // 몇차원 배열인지 확인할 수 있다
Out[102]:
3
In [104]:
b = np.arange(20).reshape(4, 5) # 4개의 큰 배열에 5개의 요소를 담는다
b
Out[104]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [105]:
b[2]
Out[105]:
array([10, 11, 12, 13, 14])
In [108]:
b[1:3, 2:4] # 중간에 있는 데이터를 가져오기
Out[108]:
array([[ 7, 8],
[12, 13]])
In [112]:
# 0 ~ 1행 1 ~ 4열의 데이터를 가져오기
# b[0:2, 1:5]
b[ :2, 1: ]
Out[112]:
array([[1, 2, 3, 4],
[6, 7, 8, 9]])
In [115]:
b[ ::2, : ] # 2칸을 가져온다 / 안적으면 1칸씩 가져옴
Out[115]:
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])
In [117]:
t = b[ : , ::2 ] # 배열은 변경된게 아니므로 변수에 넣어서 저장해줘야한다!!!
t
Out[117]:
array([[ 0, 2, 4],
[ 5, 7, 9],
[10, 12, 14],
[15, 17, 19]])
In [119]:
np.zeros(10) # float타입으로 zero 0개를 출력
Out[119]:
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [121]:
np.zeros((2, 5)) # 0으로 채워진 2차원배열
Out[121]:
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
In [123]:
np.zeros((2, 3, 4)) # 대:2, 중:3, 소:4
Out[123]:
array([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])
In [125]:
np.zeros((2, 3, 4, 5)) # 4차원의 배열도 가능하다 (참고만)
Out[125]:
array([[[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]],
[[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]]])
In [130]:
a = np.arange(6).reshape((3, 2))
a
Out[130]:
array([[0, 1],
[2, 3],
[4, 5]])
In [132]:
a.ndim
Out[132]:
2
In [134]:
b = np.array([a, a])
b
Out[134]:
array([[[0, 1],
[2, 3],
[4, 5]],
[[0, 1],
[2, 3],
[4, 5]]])
In [135]:
b.ndim
Out[135]:
3
axis(축)¶
In [137]:
b.sum(axis=0) # 0차원 축의 합계
Out[137]:
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
In [138]:
b.sum(axis=1) # 1차원의 합계
Out[138]:
array([[6, 9],
[6, 9]])
In [140]:
b.sum(axis=2)
Out[140]:
array([[1, 5, 9],
[1, 5, 9]])
과제¶
In [ ]:
#문제1) ndarray 타입으로 3 by 4의 배열을 만들고 정수값(1~100)으로
# 랜덤하게 채운다음 다음 출력들을 실행해보세요
In [173]:
arr = np.random.randint(0, 100, size=(3, 4))
arr
Out[173]:
array([[ 4, 9, 60, 46],
[68, 64, 12, 36],
[77, 99, 14, 82]])
In [ ]:
#문제2) 각행 출력하기
In [174]:
arr[0]
Out[174]:
array([ 4, 9, 60, 46])
In [175]:
arr[1]
Out[175]:
array([68, 64, 12, 36])
In [176]:
arr[2]
Out[176]:
array([77, 99, 14, 82])
In [ ]:
#문제3)열 출력하기
In [177]:
arr[ : , 0]
Out[177]:
array([ 4, 68, 77])
In [180]:
arr[ : , 1]
Out[180]:
array([ 9, 64, 99])
In [179]:
arr[ : , 2]
Out[179]:
array([60, 12, 14])
In [178]:
arr[ : , 3]
Out[178]:
array([46, 36, 82])
In [ ]:
#문제4)행의 누적합계 구하기
In [182]:
arr.sum(axis=1)
Out[182]:
array([119, 180, 272])
In [ ]:
#문제5)열의 누적합계 구하기
In [183]:
arr.sum(axis=0)
Out[183]:
array([149, 172, 86, 164])
과제풀이¶
In [ ]:
#문제1) ndarray 타입으로 3 by 4의 배열을 만들고 정수값(1~100)으로
# 랜덤하게 채운다음 다음 출력들을 실행해보세요
In [158]:
import numpy as np
arr = np.zeros((3, 4))
arr
Out[158]:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
In [161]:
for i in range(0, 3):
for j in range(0, 4):
# arr[i][j] = np.random.randint(1, 100)
arr[i, j] = np.random.randint(1, 100)
arr
Out[161]:
array([[62., 32., 67., 45.],
[52., 6., 95., 57.],
[58., 15., 36., 45.]])
In [ ]:
#문제2) 각행 출력하기
In [163]:
print(arr[0])
print(arr[1])
print(arr[2])
[62. 32. 67. 45.]
[52. 6. 95. 57.]
[58. 15. 36. 45.]
In [ ]:
#문제3)열 출력하기
In [165]:
print(arr[ : , 0])
print(arr[ : , 1])
print(arr[ : , 2])
print(arr[ : , 3])
[62. 52. 58.]
[32. 6. 15.]
[67. 95. 36.]
[45. 57. 45.]
In [ ]:
#문제4)행의 누적합계 구하기
In [166]:
arr.sum(axis=0)
Out[166]:
array([172., 53., 198., 147.])
In [167]:
arr.cumsum(axis=0) # cumsum 작동방법(행방향, 열방향 누적의 합)
Out[167]:
array([[ 62., 32., 67., 45.],
[114., 38., 162., 102.],
[172., 53., 198., 147.]])
In [ ]:
### cumsum(axis=) axis=0 행방향 누적합 / axis=1 열방향 누적합
In [ ]:
#문제5)열의 누적합계 구하기
In [168]:
arr.sum(axis=1)
Out[168]:
array([206., 210., 154.])
반응형
LIST
'프로그래밍 > Python' 카테고리의 다른 글
[Python] Numpy 기본출력 (0) | 2022.12.01 |
---|---|
python 5일차 - 성적 관리 프로그램 (0) | 2022.09.02 |
python 5일차 - OOP, 클래스 (0) | 2022.09.02 |
python 4일차 - class(클래스) (0) | 2022.09.01 |
python 4일차 - 가위바위보, UP&DOWN 게임만들기 (0) | 2022.09.01 |
Comments