21.07.22_넘파이 기초(3)

우니·2021년 7월 22일
0

넘파이

목록 보기
3/3
post-thumbnail

털 깎고 귀여워진 콩순이 입니다



저번에 이어서 넘파이 기초를 정리해 봅시다.

삼항식의 벡터화 버전

조건 a,b : 조건을 만족하면 a, 아니면 b

where 함수를 이용합니다


np.random.seed(0)
ar = np.random.randn(4,4) 
print(ar) 

#결과 
[[-0.40317695  1.22244507  0.20827498  0.97663904]
 [ 0.3563664   0.70657317  0.01050002  1.78587049]
 [ 0.12691209  0.40198936  1.8831507  -1.34775906]
 [-1.270485    0.96939671 -1.17312341  1.94362119]]



##ar의 값이 0보다 크면 2라는 값을 넣고, 0보다 작으면 -2라는 값을 넣으세요
np.where(ar > 0, 2, -2) 

#결과 
array([[-2,  2,  2,  2],
       [ 2,  2,  2,  2],
       [ 2,  2,  2, -2],
       [-2,  2, -2,  2]])


##ar의 값이 0보다 크면 2를 넣고, 0보다 작으면 원래 값을 출력하세요 
np.where(ar > 0, 2, ar) 


#결과 
array([[-0.40317695,  2.        ,  2.        ,  2.        ],
       [ 2.        ,  2.        ,  2.        ,  2.        ],
       [ 2.        ,  2.        ,  2.        , -1.34775906],
       [-1.270485  ,  2.        , -1.17312341,  2.        ]])

정렬

sort()함수를 사용합니다.


#먼저 ar이라는 배열을 만듭니다. 

ar = np.random.randn(5) 
print(ar) 

#결과 
[-0.43515355  1.84926373  0.67229476  0.40746184 -0.76991607] 

print(ar.sort(ar))

#결과 
[-0.76991607 -0.43515355  0.40746184  0.67229476  1.84926373]
[-0.43515355  1.84926373  0.67229476  0.40746184 -0.76991607]

#하지만 출력값만 정렬 됐을 뿐, 원본에는 반영되지 않았습니다. 


##원본에 sort정렬시키기

ar = np.random.randn(5) 
ar.sort()
print(ar)





2차원 정렬

먼저 열과 행의 방향을 정해야 합니다. axis 사용!

sort(1)은 열 방항 정렬 / sort(0)는 행방향을 정렬합니다.


#먼저 ar2라는 배열을 선언합니다.
ar2 = np.random.randn(5,3) 
print(ar2) 


##sort(1) 열 방항 정렬 

ar2.sort(1) 
print(ar2)

##sort(0) 행 방향 정렬 
ar2.sort(0)
print(ar2) 



ar3 = np.array([[8,12],[7,1]]) 
x = np.sort(ar3, axis=0) 
print(x) 

#결과 
[[ 7  1]
 [ 8 12]]
 
 
y = np.sort(ar3, axis=1) 
print(y) 

#결과 
[[ 8 12]
 [ 1  7]]

행렬의 고유값 출력

unique 사용합니다.

ar = np.array([3,3,2,2,1,1])
np.unique(ar)

#결과 
array([1, 2, 3])

사용자가 물어본 값이 맞는지 아닌지 True / False로 출력

in1d()를 사용합니다


values = np.array([6,0,0,3,2,5,6])

#원소들이 2,3,6 중 하나 라면 True, 아니면 False
np.in1d(values, [2,3,6])

array([ True, False, False,  True,  True, False,  True])

배열 저장, 불러오기

저장은 np.save()
불러오기는 np.load()를 사용합니다.


arr = np.arange(10) 

#저장
np.save('some_array',arr) 

#읽어오기 
np.load('some_array.npy')

행렬곱

dot을 사용합니다

예시 : x.dot(y) / np.dot(x,y)


x = np.arange(1,7).reshape(2,3) 
y = np.arange([[6., 23], [-1,7],[8,9]]) 

print(x) 

#결과 
[[1 2 3]
 [4 5 6]] 

print(y) 

#결과 
[[ 6. 23.]
 [-1.  7.]
 [ 8.  9.]] 


#두 행렬을 곱하기 
np.dot(x,y) 

#결과 

array([[ 28.,  64.],
       [ 67., 181.]])


# 0행 0열의 값 : 
1) x 0행에 0열과 y값 00열에 있는 원소를 곱한 값
2) x 01열값과 y값 10열에 있는 원소를 곱한 값 
3) x 02열값과 y값 20열에 있는 원소를 곱한 값

>>> 1) + 2) 3) 번 값이 곱해진 결과 

나머지도 위와 같은 순서로 나온 결과. 


# 아래 두행렬을 np.arange, rshape를 이용해서 생성 각각 a1, b1으로 저장하고 행렬 내적을 계산하세요 

a1 = np.arange(1,7).reshape(2,3) 
b1 = np.arange(10,16).reshape(3,2) 

c1 = np.dot(a1, b1) 

#결과 

array([[ 76,  82],
       [184, 199]])




역행렬: 어떤 행렬과 곱했을 때 대각선 방향에 있는 값들이 1이고 나머지 값은 0인 행렬이 나오는 값

역행렬 만드는 법 np.linalg.inv() 사용


np.random.seed(0) 

mt1 = np.random.randint(1,4, size=(3,3)) 
mt2 = np.linalg.inv(mt1)

print(mt2) 

#결과 
[[ 7. -1. -4.]
 [-1.  0.  1.]
 [-4.  1.  2.]]

#mt1과 mt2를 곱하면 역행렬이 나옵니다. 

np.dot(mt1, mt2) 


#결과 
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])



profile
데이터와 머신러닝을 배우는 일본사업 마케터입니다

0개의 댓글

관련 채용 정보