59doit

[Python-Numpy] #4 본문

Programming/Python(파이썬)

[Python-Numpy] #4

yul_S2 2022. 11. 6. 20:07
반응형

.reshape

arr = np.arange(32).reshape(8,-1)
arr
# <출력>
# 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]])

 shape은 (차원, 행, 열)

 

 

 

.mean & .sum

arr = np.random.randn(5,4)

arr
arr.mean()
np.mean(arr)
# <출력> -0.15612707816159727
# arr.mean() = np.mean(arr)  값이 똑같다

arr.sum()
# <출력> -3.1225415632319455

 

 

 

axis ; 0, 1, 2의 값을 가진다.
차원=0 / 행=1 / 열=2

axis = 0은 차원을 따라서 압축
axis=1 은 행을 따라서 압축
axis=2 은 열을 따라서 압축

arr.mean(axis=1)
# <출력> array([ 0.01952549,  0.12535683,  0.53172117, -0.96561754, -0.49162134])
arr.sum(axis=0)
# <출력> array([-0.67891732, -3.61662064, -1.36188536,  2.53488176])

 

 

 

 

 

 누적합 & 누적곱  (cumsum & cumprod)

arr1=np.array([0,1,2,3,4,5,6,7])
arr1.cumsum()
# <출력> array([ 0,  1,  3,  6, 10, 15, 21, 28])


arr2=np.array([[0,1,2],[3,4,5],[6,7,8]])
arr2
# <출력> 
# array([[0, 1, 2],
#        [3, 4, 5],
#        [6, 7, 8]])

arr2.cumsum(axis=0)
# <출력> 
# array([[ 0,  1,  2],
#        [ 3,  5,  7],
#        [ 9, 12, 15]])

arr2.cumprod(axis=1)
# <출력>
# array([[  0,   0,   0],
#       [  3,  12,  60],
 #      [  6,  42, 336]])

 

 

 

sum 메서드를 실행하면 불리언 배열에서 True 인 원소의 개수 셀 수 있다.

arr = np.random.randn(100)
(arr > 0).sum()
# <출력> 51

 

 

.any() & .all()

bools = np.array([False, False, True, False])

bools.any()
# <출력> True

bools.all()
# <출력> False

.any() : 하나 이상의 값이 True 인지 검사
.all()  : 모든 원소가 True 인지 검사

 

 

 

sort (오름차순 & 내림차순)

arr=np.random.randn(6)
arr
# <출력>
# array([ 1.81341706, -0.55495495,  1.08890978,  0.04406718,  1.98924833, -0.27492286])

arr.sort()
arr
# <출력>
# array([-0.55495495, -0.27492286,  0.04406718,  1.08890978,  1.81341706, 1.98924833])


# 내림차순
arr_dasc = arr[::-1]
arr_dasc
# <출력>
# array([ 1.98924833,  1.81341706,  1.08890978,  0.04406718, -0.27492286,-0.55495495])

내림차순에만 dasc

 

 

 다차원 [] 안의 내림차순

arr = np.random.randn(5,3)

arr
# <출력>
# array([[-2.24363158, -1.01167904, -0.9661356 ],
#        [-1.40012224,  0.24285708,  0.89566477],
#        [-0.39138188,  0.79215742,  0.17208338],
#        [ 1.49774096, -0.84961851,  0.10679284],
#        [-0.40281519, -0.99546957,  1.13569311]])


arr.sort (1)
arr
# <출력>
# array([[-2.24363158, -1.01167904, -0.9661356 ],
#        [-1.40012224,  0.24285708,  0.89566477],
#        [-0.39138188,  0.17208338,  0.79215742],
#        [-0.84961851,  0.10679284,  1.49774096],
#        [-0.99546957, -0.40281519,  1.13569311]])


arr_innerdesc = arr[:,::-1]
arr_innerdesc
# <출력>
# array([[-0.9661356 , -1.01167904, -2.24363158],
#        [ 0.89566477,  0.24285708, -1.40012224],
#        [ 0.79215742,  0.17208338, -0.39138188],
#        [ 1.49774096,  0.10679284, -0.84961851],
#        [ 1.13569311, -0.40281519, -0.99546957]])

 

 

 

배열 직접 변경 x -> 가지고 있는 복사본 반환

large_arr = np.random.randn(1000)
large_arr
large_arr.sort()
large_arr[int(0.05*len(large_arr))]

 

 

 

 unique

set 동일 ; 중복제거 에 의미를 둠

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names)
# <출력> array(['Bob', 'Joe', 'Will'], dtype='<U4')


ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
np.unique(ints)
# <출력> array([1, 2, 3, 4])

 

 

 

 

 

 np.inlod()

두 개의 배열을 인자로 받아서 첫 번째 배열의 원소가 두 번째 배열의 원소를 포함하는지 나타내는 불리언 배열을 반환

values = np.array([6, 0, 0, 3, 2, 5, 6])
np.in1d(values, [2, 3, 6])
# <출력> array([ True, False, False,  True,  True, False,  True])

 

 

 

 

불러오기 np.load() np.save()

 

 

 

 

 

dot 

행렬의 곱셈

x=np.array([[1.,2.,3.],[4.,5.,6.]])
y=np.array([[6.,23.],[-1,7],[8,9]])

# x.dot(y) == np.dot(x,y)
x.dot(y)
# <출력>
# array([[ 28.,  64.],
#        [ 67., 181.]])

np.dot(x,y)
# <출력>
# array([[ 28.,  64.],
#        [ 67., 181.]])

x.dot(y) = np.dot(x,y) 값이 같다

 

 

np.dot(x,np.ones(3))
x @ np.ones(3)
# <출력> array([ 6., 15.])

np.dot(x,np.ones(3)) = x @ np.ones(3) 값이 같다

 

 

 

 

np.linalg ; 역행렬

from numpy.linalg import inv,qr
x = np.random.randn(5,5)
x
mat = x.T.dot(x)   #x의 전치행렬과 x의 곱
mat
inv(mat)
mat.dot(inv(mat))
q,r = qr(mat)
q
r

 

 

np.random.seed: NumPy 에 존재하는 random generator 에 직접 접근하여 난수 생성

np.random.seed(1234)
np.random.uniform(0, 10, 5)
np.random.rand(3,3)



np.random.RandomState: 난수 생성기라는 object 를 만들어서 접근

rng2 = np.random.RandomState(1234)
rng2.uniform(0, 10, 5)
np.random.rand(3,3)

 

 

EX)

 계단 오르내리기 예제

import numpy as np
import matplotlib.pyplot as plt
import random
position = 0
walk = [position]
steps = 1000
for i in range(steps):
    step = 1 if random.randint(0,1) else -1
    position += step
    walk.append(position)

plt.figure()

 

# 처음 100회
plt.plot(walk[:100])

▼AA

 

 

 

 

 

#1000번 수행
np.random.seed(12345)

nsteps = 1000
draws = np.random.randint(0,2,size=nsteps)
steps = np.where(draws > 0,1,-1)
walk = steps.cumsum            # 누적한 층수

walk.min()
walk.max()

# 10 또는 -10인 시점
(np.abs(walk) >= 10).argmax()

 

 

 

 

 

 

 

 

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python-Pandas] #2 index  (0) 2022.11.07
[Python-Pandas] #1  (2) 2022.11.07
[Python-Numpy] #3  (0) 2022.11.06
[Python-Numpy] #2  (2) 2022.11.06
[Python-Numpy] #1  (0) 2022.11.06
Comments