[Python 데이터 분석]파이썬 넘파이 ( Python Numpy ), 파이썬 넘파이 예제 (Python Numpy Example)

2021. 3. 27. 03:00 Python/파이썬 데이터 분석

| 파이썬 넘파이(Python Numpy)

 

파이썬 넘파이(Numpy)는 파이썬에서 배열과 행렬들을 효율적으로 다룰 수 있게 해 주는 패키지로서 데이터 정보학계에서 광범위하게 쓰입니다. 

 

| 파이썬 넘파이로 배열 및 행렬 만들기(Python Numpy Array, Matrix)

 

다음은 넘파이에 대한 여러 예제입니다.

import numpy as np

mylist = [1,2,3]         # numpy array로 바구기
x = np.array(mylist)
print(x)
# array([1, 2, 3])
y = np.array([4,5,6])
print(y)
# array([4, 5, 6])

m = np.array([7,8,9], [10,11,12])    # 행렬 만들기
print(m)
'''[[ 7  8  9]
     [10 11 12]]'''

matrix = np.array([4,2,1],[5,2,6],[1,1,1])
print(matrix)
'''
[[4 2 1]
 [5 2 6]
 [1 1 1]]
'''

print(m.shape)    # shape를 이용하여 행렬의 차원 알아내기 ( 행, 렬 )
# (2, 3)

n = np.arange(0, 30, 2)    # 0부터 30까지 2씩 차이로 출력함 
# array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])

n = n.reshape(3,5)    # numpy 배열을 원하는 행렬로 재구성
'''
[[ 0  2  4  6  8]
 [10 12 14 16 18]
 [20 22 24 26 28]]
'''

o = np.linespace(0, 4, 9) # 0에서 4까지 9개의 수를 균일한 간격으로 출력
print(o))
# [ 0.   0.5  1.   1.5  2.   2.5  3.   3.5  4. ]
t = np.linspace(1, 10, 20)
print(t)
'''
[  1.           1.47368421   1.94736842   2.42105263   2.89473684
   3.36842105   3.84210526   4.31578947   4.78947368   5.26315789
   5.73684211   6.21052632   6.68421053   7.15789474   7.63157895
   8.10526316   8.57894737   9.05263158   9.52631579  10.        ]
'''

o.resize(3, 3) # o 배열을 3씩 나눈 리스트들의 행렬로 형태 바꾸기
print(o)
'''
[[ 0.   0.5  1. ]
 [ 1.5  2.   2.5]
 [ 3.   3.5  4. ]]
'''

np.ones((3, 2)) # 1로 가득찬 3x2 행렬 만들기
print(np.ones((3,2)))
'''
[[ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]]
'''

np.zeros((2, 3)) # 0으로 가득찬 2x3 행렬 만들기
print(np.zeros((2,3)))
'''
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
'''

eye = np.eyes(3) # 크기가 3x3인 단위행렬 만들기
print(eye)
'''
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
'''

diag = np.diag(y) # 배열을 사선형의 행렬데이터로 변환
print(diag)
'''
[[4 0 0]
 [0 5 0]
 [0 0 6]]
'''

rep = np.array([1, 2, 3] * 3) # 배열 반복
print(rep)
# [1 2 3 1 2 3 1 2 3]

rep1 = np.repeat([1, 2, 3], 3)
print(rep1)
# [1 1 1 2 2 2 3 3 3]
rep2 = np.repeat(['a','b','c'],4)
print(rep2)
# ['a' 'a' 'a' 'a' 'b' 'b' 'b' 'b' 'c' 'c' 'c' 'c']

p = np.ones([2, 3])

v = np.vstack([p, 2*p]) # 행렬을 수직으로 결합
print(v)
'''
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 2.  2.  2.]
 [ 2.  2.  2.]]
'''
h = np.hstack([p, 2*p]) # 행렬을 수평으로 결합
print(h)
'''
[[ 1.  1.  1.  2.  2.  2.]
 [ 1.  1.  1.  2.  2.  2.]]
'''

 

| 파이썬 넘파이 연산(Python Numpy Operation)

 

넘파이 자료구조 간의 연산 예제입니다.

x = np.array([1,2,3])   
y = np.array([4,5,6])
print(x + y) # 요소끼리의 덧셈, 뺄셈, 곱셈, 나눗셈, 제곱
print(x - y)
print(x * y)
print(x / y)
print(x**2)
'''
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[ 0.25  0.4   0.5 ]
[1 4 9]
'''

x.dot(y) # dot product 연산 1*4 + 2*5 + 3*6
# 32

z = np.array([y, y**2])
print(len(z)) # 행렬의 행 수
# 2

print(z)
'''
[[ 4  5  6]
 [16 25 36]]
'''
t = z.T # 전치연산 (transpose)
print(t)
'''
[[ 4 16]
 [ 5 25]
 [ 6 36]]
'''

z.dtype # 요소의 데이터 타입 보기
# dtype('int64')
z = z.astype('f') # 요소의 데이터 타입 바꾸기
z.dtype
# dtype('float32')

 

| 파이 인덱싱, 슬라이싱(Python Numpy Indexing, Slicing) 

 

넘파이 인덱싱과 슬라이싱 예제입니다.

s = np.arange(13)**2
print(s)
# [  0   1   4   9  16  25  36  49  64  81 100 121 144]

a, b, c = s[0], s[4], s[-1] # 인덱싱
print(a, b, c)
# 0 16 144

s[1:5]
# [1 4 9 16]

s[-4:]
# [81, 100, 121, 144]

s[-5::-2] # 오른쪽에서 5번째 숫자에서부터 왼쪽 방향으로 2씩 데이터 출력하기
# [64, 36, 16, 4, 0]

r = np.arange(36)
r.resize((6, 6))
old = np.array([[1,1,1],
              [1,1,1]])
new = old
new[0, :2] = 0 # 첫번째 행의 2열까지 0으로 만들기
print(r)
print(old)
'''
[[ 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 32 33 34 35]]
[[0 0 1]
 [1 1 1]]
'''

r[2, 2] # 2행 2열의 요소 접근
# 14

r[3, 3:6] # 3행의 3열부터 5열까지의 요소 접근
# [21, 22, 23]

r[:2, :-1] # 1~2행과 1~5행까지 접근 (-1은 맨 오른쪽 열을 의미)
'''
[[ 0  1  2  3  4]
 [ 6  7  8  9 10]]
'''

r[-1, ::2] # 마지막행에서 0부터 오른쪽 방향으로 2씩 데이터 출력
# [30, 32, 34]

print(r>30)
'''
[[False False False False False False]
 [False False False False False False]
 [False False False False False False]
 [False False False False False False]
 [False False False False False False]
 [False  True  True  True  True  True]]
'''
r[r>30] # r 행렬에서 30보다 큰 숫자들의 리스트 ( r> 30에서 True, False로 데이터 결정 )
# [31, 32, 33, 34, 35]

r[r>30] = 30
print(r)
'''
[[ 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 30 30 30 30 30]]
'''

 

참고자료 : https://www.coursera.org/learn/python-data-analysis

출처: https://engkimbs.tistory.com/664?category=763908 [새로비]