# AI 이론/Numpy

[Numpy] 배열의 연산 및 벡터 내적

alz 2022. 1. 5. 23:54

배열의 연산

배열의 연산(add,sub,mul,div,rem)

기본 사칙연산과 마찬가지로 식이 같다

이와 마찬가지로, sqrt,square 연산이 모두가능하다.

평소 파이썬 방식과 매우 흡사하기 때문에, 이부분은 쉽게 이해가 되었다

 

백터의 내적

내적의 연산 방식은 [a,b],[c,d] 가 주어졌을때 ,ac+bd 로 연산

a b    e f 

 c d    g h 

위와 같이 2차원 배열이 2개 주어졌을경우 두 내적의 연산 값은

ae+bg  af+bh

ce+dg  cf+dh

로 나타낼수 있다

▶왜 for문연산으로 하지않고, 벡터연산을 사용하는가? 

그 이유는 실행속도의 엄청난 차이 때문이다.

 

●for문을 사용해서 sum 값을 구할 경우

실행시간이 대략 30초 가량 걸렸는데, 매우 오래걸린 시간이다.

 

●벡터연산을 사용해서 sum 값을 구할 경우

실행시간이 대략 0.0958초로 for문과 비교했을때 어마무시한 차이가 발생

 

 

절댓값,올림,내림,반올림,버림

2차원 배열의 내의 값들을 모두 양수로, 혹은 소수점 자리에 수정을 해야할때가 있는데 이때, 도움이 되는것들이다

 

올림:  np.ceil(배열명)

내림 :np.floor(배열명)

반올림: np.round(배열명,반올림할 자리수))

버림:np.trunc(배열명)

절대값 : np.abs(배열명) 

(절대값은 위에 나오지는 않았지만, 사용방식은 똑같다)

 

배열의 최솟값,최대값,특정 행,열의 합

배열의 최대,최솟값은 파이썬 알고리즘을 공부하면서 너무나 많이봐서 익숙하다. min(),max() 함수를 사용하는 것과 같은데

다른점은 axis 라는 축을 사용해서 축을 기준으로 최대,최소를 구할수 있다. 

axis = 0 (x축 기준 row)

axis = 1 (y축 기준 col)

axis = 2 (z축 기준 depth)

 

위의 코드를 보면 우리에게 너무나 익숙한 부분도 있고, 어색한 부분들도 있다.

np.min(arr1)과같은 부분은 대충 감이올것인데, arr1의 최솟값을 출력하는것을 알수 있다.

여기서, 낯설었던것은 axis = 0 or axis = 1 일때이다.

axis = 0 이면 , 각 열마다의 최댓값 즉 (1,5,4)

axis = 1 이면, 각 행마다의 최대값 즉 (3,5) 가 출력되는 것을 알수 있다.

 

 

mean() 을이용한 평균,표준편차 구하기(axis = 0 ,axis =1)

위에서 axis에 대해 조금 익숙해졌다면, 쉽게 보일것이다

axis = 0 즉 각 열마다의 평균 = -1.5,1.5,3.5

axis = 1 즉 각 행마다의 평균 =2/3,5/3

std(axis = 1)은 각 행마다의 표준편차를 구하라는 의미

 

그외의 누적합,중간값 반환,비교연산,삼각함수

cumsum()을 이용한 누적합 계산

arr1 =[[1,-2,3],[-4,5,4]]

median()을 이용한 중간값 반환

axis =0 일때는 각 열마다의 중간값 반환

axis 가 없을경우는 전체 배열의 중간값

비교 연산

삼각 함수

 
 
더보기

관련글

http://machinelearningkorea.com/2019/05/18/%ED%8C%8C%EC%9D%B4%EC%8D%AC-axis-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%B9%98%ED%8A%B8%EC%BD%94%EB%93%9C/ (axis축에 대한이해)

이분이 축에 대해 잘정리 하셨는데 한번씩 보는게 좋을거 같습니다.

 

'# AI 이론 > Numpy' 카테고리의 다른 글

[Numpy] N차원 배열 정렬 및 형태 변경  (0) 2022.01.06
[Numpy] 넘파이 배열생성  (0) 2022.01.05