Sunday, November 15, 2015

numpy모듈의 기본 연산

배열을 가지고 기본적인 산술 연산을 할 수 있다.

코드
a = np.array([20, 30, 40, 50])
print("배열 a : %s" %a)
b = np.arange(4)
print("배열 b : %s"  %b)
print("배열 a - b : %s" %(a-b))
print("배열의 각 요소 제곱 값 구하기 : %s" %b**2)
print("비교 연산으로 참 거짓 값 구하기 : %s" %(a<30))

결과
배열 a : [20 30 40 50]
배열 b : [0 1 2 3]
배열 a - b : [20 29 38 47]
배열의 각 요소 제곱 값 구하기 : [0 1 4 9]
비교 연산으로 참 거짓 값 구하기 : [ True False False False]


각 요소에 대한 곱 연산은 * 을 이용하지만, 행렬 곱은 dot 함수를 이용한다.

코드
array1 = np.array([[1, 1], [0, 1]])
array2 = np.array([[2, 3], [1, 5]])
print("배열 array1 : ")
print(array1)
print("배열 array2 : ")
print(array2)
print("배열의 각 요소들의 단순 곱 : ")
print(array1*array2)
print("행렬 곱 구하기 : ")
print(array1.dot(array2))
print(np.dot(array1, array2))

결과
배열 array1 : 
[[1 1]
 [0 1]]
배열 array2 : 
[[2 3]
 [1 5]]
배열의 각 요소들의 단순 곱 : 
[[2 3]
 [0 5]]
행렬 곱 구하기 : 
[[3 8]
 [1 5]]
[[3 8]
 [1 5]]


일부 연산, +=, *= 등은 새로운 배열을 생성하지 않고 이미 존재하고 있는 배열을 수정한다.

코드
A = np.ones((2,3), dtype=int)
B = np.random.random((2,3))
print(" 배열 A : ")
print(A)
print(" 배열 B : ")
print(B)
print(" 배열 A의 각 요소에 3 곱하기(결과가 A에 저장된다) -> 현재 배열 A :  ")
A *= 3
print(A)
print(" 배열 B의 각 요소에 배열 A의 각 요소의 값을 더한다.(결과가 B에 저장된다) -> 현재 배열 B : ")
B += A
print(B)

결과
배열 A : 
[[1 1 1]
 [1 1 1]]
 배열 B : 
[[ 0.96996427  0.86763816  0.32974234]
 [ 0.68707904  0.2039358   0.88133135]]
 배열 A의 각 요소에 3 곱하기(결과가 A에 저장된다) -> 현재 배열 A :  
[[3 3 3]
 [3 3 3]]
 배열 B의 각 요소에 배열 A의 각 요소의 값을 더한다.(결과가 B에 저장된다) -> 현재 배열 B : 
[[ 3.96996427  3.86763816  3.32974234]
 [ 3.68707904  3.2039358   3.88133135]]


배열의 모든 요소의 합 계산과 같은 많은 단항 연산 또한 간단히 계산된다.

코드
a = np.arange(12).reshape(4,3)
print("배열 a : ")
print(a)
print("배열의 각 요소의 합 : ")
print(a.sum())
print("배열의 요소중 가장 작은 값을 가지는 요소 : ")
print(a.min())
print("배열의 요소중 가장 큰 값을 가지는 요소 : ")
print(a.max())

결과
배열 a : 
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
배열의 각 요소의 합 : 
66
배열의 요소중 가장 작은 값을 가지는 요소 : 
0
배열의 요소중 가장 큰 값을 가지는 요소 : 
11


기본적으로, 위의 연산들은 배열의 모양에 관계없이 단순히 숫자로 이루어진 리스트로써 생각될 수 있다. 그러나 axis 파라미터를 적용함으로써 다차원 배열의 특정한 축을 기준으로 계산하는 것 또한 가능하다.

코드
a = np.arange(12).reshape(4,3)
print("배열 a : ")
print(a)
print("배열의 각 column의 합을 구하기")
print(a.sum(axis=0))
print("배열의 각 row의 합을 구하기")
print(a.sum(axis=1))
print("배열의 각 row의 누적합을 구하기")
print(a.cumsum(axis=1))

결과
배열 a : 
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
배열의 각 column의 합을 구하기
[18 22 26]
배열의 각 row의 합을 구하기
[ 3 12 21 30]
배열의 각 row의 누적합을 구하기
[[ 0  1  3]
 [ 3  7 12]
 [ 6 13 21]
 [ 9 19 30]]

No comments:

Post a Comment

뉴라이트의 기본적인 개념과 특징

뉴라이트  한국에서 자칭 신우익을 이르는 말. 영어의 신(new) + 우익(right)의 합성어이다.  옛날 종북주의자 시절의 파시즘과 전체주의적 사상을 간직한 채 친일반민족 행위 옹호로 돌아선 사람들이다.  우파를 가장한 짝퉁 우파...