Python - NumPy 기초 (2)

2 분 소요

2. 배열 처리 함수

  • .sort() - 배열의 요소를 정리
  • .concatenate() - 배열 결합
  • .vstack() - 배열을 세로로 결합
  • .hstack() - 배열을 가로로 결합
  • .shape - 배열의 모양 출력
a = np.array([6,3,8,5,1,9,2])
print(np.sort(a))  #배열 안의 값을 오름차순으로 정리


b = np.array([11,22,33])
print(np.concatenate((a, b)))  #두 배열을 결합
[1 2 3 5 6 8 9]
[ 6  3  8  5  1  9  2 11 22 33]

 

a = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8,9], [10,11,12]])

print(np.vstack((a, b)))  #두 배열을 세로로(vertical) 병합  
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

 

np.hstack((a,b))  #두 배열을 가로로(horizontal) 병합
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

 

a = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8,9], [10,11,12]])

np.concatenate((a,b))  #2차원 배열끼리 concatenate로 결합하면 vstack과 같은 결과를 보여준다
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

 

a= np.arange(12)
print(a)
print(a.shape)
[ 0  1  2  3  4  5  6  7  8  9 10 11]
(12,)

 

b=a.reshape(3,4)
print(b.shape)
(3, 4)

3. 배열 요소 접근과 인덱싱 및 슬라이싱

a = np.array([1,2,3,4,5,6,7,8])

b = a[np.newaxis, 2:6]  # 새로운 행의 값으로 2번째부터 6번째까지 칸의 값을 추가
print(b.shape)
print(b)
(1, 4)
[[3 4 5 6]]

 

b = a[np.newaxis, :]  # 새로운 행의 값으로 배열 전체를 추가
print(b.shape)
print(b)
(1, 8)
[[1 2 3 4 5 6 7 8]]

 

b = a[:, np.newaxis]  # 배열전체의 값을 새로운 행으로 만들어서 각 칸의 값으로 추가
print(b.shape)
print(b)
(8, 1)
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]]

 

#1차원 배열의 인덱싱
a = np.array([1,2,3,4,5])
a[3]#인덱싱. 
4

 

#2차원 배열의 인덱싱
b = np.array([[1,2,3], [4,5,6]])
b[0, 1]# 0번 줄의 1번칸 요소 = b[0][1] = 2 
b[0]  # 0번 줄의 요소 = [1,2,3]
b[1, 1:] # 1번줄의 1번칸부터 모든요소 = [5,6]
b[:, 0] # 모든 줄의 0번칸 요소 = [1, 4]
b[:, 0][:, np.newaxis] # 모든 줄의 0번칸 요소를 새로운 행으로 해서 각 칸에 추가 = [[1],[4]]
array([[1],
       [4]])

 

a[1:3]  #슬라이싱
array([2, 3])

 

a[a>3]  #배열 a의 요소 중 3보다 큰 요소만 추출. 요소에 대한 조건 수식을 작성하면 그 수식을 만족하는 요소만 추출해서 반환
array([4, 5, 6])

 

a[a%2==0]  #a배열의 요소 중에서 짝수만 반환
array([2, 4, 6])

 

a = np.array([1,2,3,4,5,6])
b = np.array([True, False, True, False, True, False])
c = a[b] #배열 b를 인덱스로 사용, True인 값만 추출
c
array([1, 3, 5])

 

a = np.array([1,2,3,4,5,6])
b = np.array([0,1,1,3,3,5]) #배열 b를 인덱스로 사용
c = a[b]  # c = [a[0], a[1], a[1], a[3], a[3], a[5]] = [1,2,2,4,4,6]
c
array([1, 2, 2, 4, 4, 6])

4. 배열끼리의 연산

+, -, *, / : 배열의 동일한 요소마다 연산 수행

a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,12,13],[14,15,16]])
a+b  # [[1+11, 2+12, 3+13], [4+14, 5+15, 6+16]]
array([[12, 14, 16],
       [18, 20, 22]])

 

a-b
array([[-10, -10, -10],
       [-10, -10, -10]])

 

a*b
array([[11, 24, 39],
       [56, 75, 96]])

 

a/b
array([[0.09090909, 0.16666667, 0.23076923],
       [0.28571429, 0.33333333, 0.375     ]])

 

a=np.array([[1,2,3],[4,5,6]])
b=np.array([11,12,13])
a+b  # [[1+11, 2+12, 3+13], [4+11, 5+12, 6+13]]

#b가 [[10,11,12],[10,11,12]]으로 확장하여 계산. 브로드 캐스팅
array([[12, 14, 16],
       [15, 17, 19]])

 

d = np.array([[1,0],[0,1],[1,0]])
a@d  #행과 열을 곱한다


#  [[1,2,3],     [[1,0]
#   [4,5,6]]  X   [0,1]
#                 [1,0]]
#
#  = [[ (1*1)+(2*0)+(3*1), (1*0)+(2*1)+(3*0) ], 
#     [ (4*1)+(5*0)+(6*1), (4*0)+(5*1)+(6*0) ]]
array([[ 4,  2],
       [10,  5]])

 

a.dot(d)
array([[ 4,  2],
       [10,  5]])

5. 배열과 숫자 연산. +,-,*, **, / ….=> 배열 각 요소에 숫자와 연산

a=np.array([[1,2,3],[4,5,6]])
a*10
array([[10, 20, 30],
       [40, 50, 60]])

 

b=a<5  #배열 각 요소와 비교 연산한 결과인 bool 값을 요소로 하는 배열 반환
b
array([[ True,  True,  True],
       [ True, False, False]])

 

a[b]  #조건을 만족하는 배열 요소만 추출하여 배열로 반환
array([1, 2, 3, 4])

댓글남기기