numpy 이어서 진행
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
array([[1, 2, 3],
[4, 5, 6]])
array([1, 2, 3])
2
별다른 설정을 하지 않는이상 원소대 원소로 적용된다.
스칼라를 넣으면 각 원소대로 동일하게 적용된다.
array([[[42, 42, 42],
[42, 42, 42]],
[[ 7, 8, 9],
[10, 11, 12]]])
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
콤마를 이용한 접근
array([7, 8, 9])
array([[ 7, 8, 9],
[10, 11, 12]])
array([7, 8, 9])
- 슬라이스를 이용한 인덱싱
arr[1:6]
array([ 1, 2, 3, 4, 64])
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
array([[1, 2, 3],
[4, 5, 6]])
array([[2, 3],
[5, 6]])
array([4, 5])
array([3, 6])
array([[1],
[4],
[7]])
array([[1, 0, 0],
[4, 0, 0],
[7, 8, 9]])
- 불린 인덱싱
array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='<U4')
array([[ 0.31418733, 0.14202765, 0.11819096, -0.20852206],
[-0.93224175, -0.82938926, -0.14524378, 1.46134767],
[ 2.93379231, 0.49556681, -1.92467859, -1.01128291],
[-0.90621418, -0.23677077, 0.22141414, 0.85750657],
[-0.54026319, 0.63043219, 1.72885665, -0.02455902],
[ 1.20207865, -1.44712328, 1.64159005, -0.29737174],
[-0.33611151, 0.13768536, 0.53848796, 0.41348996]])
특정 조건식 이용
array([ True, False, False, True, False, False, False])
array([[ 0.31418733, 0.14202765, 0.11819096, -0.20852206],
[-0.90621418, -0.23677077, 0.22141414, 0.85750657]])
array([[ 0.11819096, -0.20852206],
[ 0.22141414, 0.85750657]])
array([-0.20852206, 0.85750657])
조건식 바꿔도 다른형태로 가져올 수 있을까?
array([[-0.93224175, -0.82938926, -0.14524378, 1.46134767],
[ 2.93379231, 0.49556681, -1.92467859, -1.01128291],
[-0.54026319, 0.63043219, 1.72885665, -0.02455902],
[ 1.20207865, -1.44712328, 1.64159005, -0.29737174],
[-0.33611151, 0.13768536, 0.53848796, 0.41348996]])
array([[-0.93224175, -0.82938926, -0.14524378, 1.46134767],
[ 2.93379231, 0.49556681, -1.92467859, -1.01128291],
[-0.54026319, 0.63043219, 1.72885665, -0.02455902],
[ 1.20207865, -1.44712328, 1.64159005, -0.29737174],
[-0.33611151, 0.13768536, 0.53848796, 0.41348996]])
array([[-0.93224175, -0.82938926, -0.14524378, 1.46134767],
[ 2.93379231, 0.49556681, -1.92467859, -1.01128291],
[-0.54026319, 0.63043219, 1.72885665, -0.02455902],
[ 1.20207865, -1.44712328, 1.64159005, -0.29737174],
[-0.33611151, 0.13768536, 0.53848796, 0.41348996]])
조건식 조합을 통해 사용 (마스킹, 마스킹 작업 / 해당하는 부분은 걸러 내겠다)
[ True False True True True False False]
array([[ 0.31418733, 0.14202765, 0.11819096, -0.20852206],
[ 2.93379231, 0.49556681, -1.92467859, -1.01128291],
[-0.90621418, -0.23677077, 0.22141414, 0.85750657],
[-0.54026319, 0.63043219, 1.72885665, -0.02455902]])
크기 조건을 통해서 사용
array([[0.31418733, 0.14202765, 0.11819096, 0. ],
[0. , 0. , 0. , 1.46134767],
[2.93379231, 0.49556681, 0. , 0. ],
[0. , 0. , 0.22141414, 0.85750657],
[0. , 0.63043219, 1.72885665, 0. ],
[1.20207865, 0. , 1.64159005, 0. ],
[0. , 0.13768536, 0.53848796, 0.41348996]])
array([[7. , 7. , 7. , 7. ],
[0. , 0. , 0. , 1.46134767],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[1.20207865, 0. , 1.64159005, 0. ],
[0. , 0.13768536, 0.53848796, 0.41348996]])
- 팬시 인덱싱
array([[1. , 0. , 0.16, 1. ],
[1. , 0. , 0. , 1. ],
[1. , 1. , 0. , 1. ],
[0. , 1. , 0. , 1. ],
[0. , 1. , 1. , 1. ],
[0. , 0. , 1. , 1. ],
[1. , 0. , 1. , 1. ],
[1. , 0. , 0.75, 1. ]])
array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[4., 4., 4., 4.],
[5., 5., 5., 5.],
[6., 6., 6., 6.],
[7., 7., 7., 7.]])
array([[4., 4., 4., 4.],
[3., 3., 3., 3.],
[0., 0., 0., 0.],
[6., 6., 6., 6.]])
array([[5., 5., 5., 5.],
[3., 3., 3., 3.],
[1., 1., 1., 1.]])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
속성을 바꿔주는 reshape
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
2-3. 전치행렬과 축 교환
데이터를 행렬 연산할 때 데이터 방향을 바꾸거나 하는 경우에 사용
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
전치 행렬 (대각선을 기준으로 돌리는것)
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
array([[ 0.38837876, -1.53383263, -0.70905096],
[ 0.39830945, 1.01735593, -0.53527625],
[-0.87479425, -1.85106408, -0.71978754],
[ 1.24467637, -0.93007816, -0.20992612],
[-0.47212238, -0.35539639, -0.76731272],
[ 0.57663902, -0.24281578, -1.49965593]])
dot 연산자 : 행렬곱을 하기 위한 연산자
array([[ 3.17938483, 0.2989419 , -0.62270462],
[ 0.2989419 , 7.86440533, 2.7074599 ],
[-0.62270462, 2.7074599 , 4.18917373]])
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
축교환 두가지 방법( transpose, seapaxes)
- transpose 메서드는 다차원 배열의 축 순서를 재배열하는 데 사용. 기본적으로 2차원 배열에서는 행과 열을 교환하는 역할을 하며, 다차원 배열에서는 원하는 축 순서로 재배열할 수 있다.
- swapaxes 메서드는 배열의 두 축을 교환하는 데 사용. 이 방법은 특정 두 축만 교환하고 싶을 때 유용함
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
2-4. 유니버설 함수
- ndarray 안에 있는 데이터 원소별로 연산을 수행하는 함수
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
2.98095799e+03, 8.10308393e+03])
array([-0.01098015, -0.63540319, 0.51363782, 0.82891089, 1.79008276,
0.00271256, 0.46864156, 0.86479942])
[-5.13297704 -4.51889828 -1.04951801 7.74404083 -3.71578438 -9.68176313
3.04555507]
[-0.13297704 -0.51889828 -0.04951801 0.74404083 -0.71578438 -0.68176313
0.04555507]
[-5. -4. -1. 7. -3. -9. 3.]
- p.sqrt 함수는 배열의 각 요소에 대해 제곱근을 계산, 그러나 배열의 요소 중 음수가 포함되어 있으면, 그 값에 대한 제곱근은 실수 영역에서 정의되지 않기 때문에 경고 메시지와 함께 nan (Not a Number)이 반환된다.
- np.sqrt(arr, arr)처럼 두 번째 인수를 지정하면, 제곱근 결과를 원래 배열에 직접 저장하게 됩니다. 이로 인해 원래 배열도 변경된다.
<ipython-input-55-bcce5ef9aa78>:2: RuntimeWarning: invalid value encountered in sqrt
np.sqrt(arr)
<ipython-input-55-bcce5ef9aa78>:3: RuntimeWarning: invalid value encountered in sqrt
np.sqrt(arr, arr)
array([ nan, nan, nan, 2.78281168, nan,
nan, 1.74515188])
2-5. 배열을 사용한 데이터 처리
array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ],
[-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
[-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
...,
[ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97],
[ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98],
[ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
7.06400028],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
...,
[7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
7.04279774],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568]])
LaTeX는 과학 및 수학 문서 작성을 위한 고급 마크업 언어
- LaTeX를 사용하여 수식을 표현할 때는 보통 $ 기호를 사용하여 인라인 수식을, $$ 기호를 사용하여 디스플레이 수식을 작성
Text(0.5, 1.0, 'Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values')
<Figure size 640x480 with 0 Axes>
파일을 열고 닫을때는 다썼으면 항상 close를 해주는 것이 좋다.
2-5-1. 배열연산으로 조건절 표현하기
[1.1, 2.2, 1.3, 1.4, 2.5]
array([1.1, 2.2, 1.3, 1.4, 2.5])
array([[-0.87861922, -0.02027518, -0.19702262, 0.49494806],
[-0.20048939, -1.69634798, 1.18348629, 0.53803308],
[-0.79133033, -0.30097681, -0.54936791, 0.74210303],
[ 0.15464454, 0.29397788, 0.32126662, 1.04555782]])
array([[False, False, False, True],
[False, False, True, True],
[False, False, False, True],
[ True, True, True, True]])
array([[-2, -2, -2, 2],
[-2, -2, 2, 2],
[-2, -2, -2, 2],
[ 2, 2, 2, 2]])
array([[-0.87861922, -0.02027518, -0.19702262, 2. ],
[-0.20048939, -1.69634798, 2. , 2. ],
[-0.79133033, -0.30097681, -0.54936791, 2. ],
[ 2. , 2. , 2. , 2. ]])
2-5-2. 수학 메소드와 통계 메소드
array([[-1.25417795, -1.0534699 , 0.64255036, -1.98149258],
[ 1.786615 , -0.07500399, 0.01232515, 1.53307419],
[-0.3441816 , 1.98396668, 0.46314424, 0.20514597],
[ 0.2274051 , -0.32340827, -0.59670309, 0.46545841],
[ 0.18942443, 1.10625815, -0.81793688, -0.0247016 ]])
arr.mean()
0.10721459181540043
0.10721459181540043
2.1442918363080086
축 지정해서 평균값 계산 (0은 로우(행), 1은 컬럼(열))
array([-0.91164752, 0.81425259, 0.57701882, -0.05681196, 0.11326103])
array([-1.17651492, 0.62745125, 0.59247687, 0.34556712])
cumsum : 누적합
array([ 0, 1, 3, 6, 10, 15, 21, 28])
[[ 0 1 2]
[ 3 5 7]
[ 9 12 15]]
[[ 0 0 0]
[ 3 12 60]
[ 6 42 336]]
2-5-3. 불리언 배열을 위한 메소드
50
array([ 1.33455503, -1.0799514 , -0.67697912, 1.43785143, -0.70609799,
0.32280939, -2.65886002, 0.78521121, -0.81513527, 0.70595104,
1.24209257, 0.93828393, 1.85087578, 1.80415341, 1.08827931,
-0.57110892, -1.13116583, 0.52928888, -0.51802388, -0.79643948,
1.85863318, -1.22659384, -0.57102941, 0.60266867, 0.28130688,
-0.89871307, 1.00954541, -1.04621967, -0.42707254, -0.88548443,
0.16517217, 1.33653896, 1.01990512, 1.200431 , -0.63634069,
-0.76048001, -0.14640436, -0.70842833, 0.61570765, 0.26456433,
1.327428 , 0.9373116 , 0.50557473, -0.93261726, 0.05061311,
0.21789508, 1.17199977, -1.42296151, 0.88482975, -0.64599318,
0.92106674, -1.0625743 , -0.44676127, -1.23943006, 0.10157491,
-0.34316664, 0.44367653, -0.78977748, 0.77380698, -1.35129422,
-0.50898886, -1.87041103, -0.1302399 , -0.81115088, 0.30895486,
-1.0918783 , 0.13984116, -0.47300834, 0.87216203, 0.17649997,
0.18947673, -1.68946669, -0.62099707, 0.08624882, 0.2841831 ,
2.72471551, -2.00513849, -0.81972458, 1.56282409, 1.52441391,
0.06080744, -0.70218363, -0.43403293, 0.51382889, 1.18276367,
-0.34258527, -1.571904 , -1.03991186, 0.81339957, -1.53300246,
0.40444278, -0.16248265, 0.00362608, 1.12504321, -0.05479325,
-0.25361964, -1.45209904, 0.19102457, -0.7385162 , -0.45394433])
[ True False False True False True False True False True True True
True True True False False True False False True False False True
True False True False False False True True True True False False
False False True True True True True False True True True False
True False True False False False True False True False True False
False False False False True False True False True True True False
False True True True False False True True True False False True
True False False False True False True False True True False False
False True False False]
any() 함수는 반복 가능한 객체 내의 원소들 중 하나라도 참(True)인 값이 있을 경우 참(True)을 반환
all() 함수는 반복 가능한 객체 내의 모든 원소가 참(True)일 경우 참(True)을 반환하고, 하나라도 거짓(False)이면 거짓(False)을 반환
True
True
2-5-4. 정렬
array([ 1.02656115, 0.8079371 , -0.21351779, -0.98191918, -0.13679464,
1.99789963])
array([-0.98191918, -0.21351779, -0.13679464, 0.8079371 , 1.02656115,
1.99789963])
array([[-1.06079774, 1.59523589, -1.05682653],
[-1.12294276, 0.79404114, 1.05618036],
[-1.84365856, -0.65495481, 0.07259978],
[ 0.45496901, 0.06344372, -0.74801799],
[ 0.27582879, 1.22379075, -1.72971784]])
array([[-1.06079774, -1.05682653, 1.59523589],
[-1.12294276, 0.79404114, 1.05618036],
[-1.84365856, -0.65495481, 0.07259978],
[-0.74801799, 0.06344372, 0.45496901],
[-1.72971784, 0.27582879, 1.22379075]])
# 100개 생성
# sort정렬
0.012043351846583436
2-5-5. 집합함수
집합은 중복되는 값들이 들어가지않음(전부 유니크한 값들)
넘파이에서는 유니크(unique) 제공
array(['Bob', 'Joe', 'Will'], dtype='<U4') # 중복된거 제거하고 함
array([1, 2, 3, 4])
{'Bob', 'Joe', 'Will'}
['Bob', 'Joe', 'Will']
array([ True, False, False, True, True, False, True])
2-5-6. 배열을 사용한 파일 입출력
현재 위치에 some_array.txt 파일 저장
load로 읽어오기
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
savez : 더 작은 공간에 저장하기 위해 묶어서 사용
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
2-6. 선형대수
array([[ 28., 64.],
[ 67., 181.]])
array([[ 28., 64.],
[ 67., 181.]])
array([1., 1., 1.])
array([ 6., 15.])
array([ 6., 15.])
선형대수에서 사용하고있는 코드
numpy.linalg.qr 함수는 QR 분해(QR decomposition)를 수행합니다. QR 분해는 행렬을 두 개의 행렬 Q(직교 행렬)와 R (상삼각 행렬)로 분해하는 방법
QR 분해의 목적
- 선형 시스템의 해를 구하는 데 사용
- 고유값 문제(eigenvalue problem)를 푸는 데 사용
- 최소 제곱 문제(least squares problem) 해결
결과 설명
- mat: 주어진 대칭 행렬 X^T X
- inv(mat): 주어진 행렬의 역행렬
- mat.dot(inv(mat)): 주어진 행렬과 그 역행렬의 곱. 이론적으로는 단위 행렬(identity matrix)이 되어야 하지만, 수치적 오차로 인해 완벽한 단위 행렬이 아닐 수 있다.
- r: QR 분해의 결과로 나온 상삼각 행렬 R
array([[-5.87415396, 2.81969888, 2.1718891 , 0.67037583, -2.88674796],
[ 0. , -3.25633792, 0.23949067, 0.84809582, 0.63937392],
[ 0. , 0. , -0.98747836, -0.879367 , 1.674039 ],
[ 0. , 0. , 0. , -0.61654179, 0.89420226],
[ 0. , 0. , 0. , 0. , 0.00655302]])
2-7. 난수 생성
기존의 랜덤은 표준정규분포를 기반으로 데이터가 작성되는데 그중 normal분포를 이용해라는 것이다.
정규분포는 중심이 평균(mean)이고, 폭이 표준편차(standard deviation)인 종 모양의 분포
array([[ 0.00496828, -0.48327476, 0.20832977, -0.87050454],
[ 1.0531076 , 0.5248491 , 0.81973167, -0.09020017],
[ 2.57686253, -1.56645094, 0.13767585, -1.24449263],
[-0.77756683, 0.15141695, 0.38842109, 1.50400856]])
The slowest run took 4.59 times longer than the fastest. This could mean that an intermediate result is being cached.
17.8 ms ± 8.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
432 µs ± 100 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
array([ 0.47143516, -1.19097569, 1.43270697, -0.3126519 , -0.72058873,
0.88716294, 0.85958841, -0.6365235 , 0.01569637, -2.24268495])
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 기초 11일차 (0) | 2024.07.11 |
---|---|
#파이썬 기초 10일차_2 (0) | 2024.07.10 |
#파이썬 기초 9일차_2 (0) | 2024.07.09 |
#파이썬 기초 9일차_1 (0) | 2024.07.09 |
#파이썬 기초 8일차_2 (0) | 2024.07.08 |