
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([[1, 2, 3],[4, 5, 6]])
array3 = np.array([[1,2,3]])
print('array1 type: ', type(array1))
print('array1 형태: ', array1.shape)
print('array2 형태: ', array2.shape)
print('array3 형태: ', array3.shape)
array1 type: <class 'numpy.ndarray'>
array1 형태: (3,)
array2 형태: (2, 3)
array3 형태: (1, 3)
print('array1: {:0}차원, array2: {:1}차원,
array3: {:2}차원'.format(array1.ndim, array2.ndim, array3.ndim))
list2 = [1, 2, 'test']
array2 = np.array(list2)
print(array2, array2.dtype)
['1' '2' 'test'] U11
array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64')
print(array_float, array_float.dtype)
[1. 2. 3.] float64
1. arange()
arange()는 0부터 함수 인자 값 -1까지의 값을 순차적으로 ndarray의 데이터 값으로 반환해 준다
start, stop을 통해 연속한 값을 부여할 수 있다
sequence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
[0 1 2 3 4 5 6 7 8 9]
int32 (10,)
2. zeros(), ones()
zero_array = np.zeros((3, 2), dtype='int32')
print(zero_array)
array1 = np.arange(10)
print('array1:\n', array1)
array2 = array1.reshape(2, 5)
print('array2:\n', array2)
array3 = array1.reshape(5, 2)
print('array3:\n', array3)
array1:
[0 1 2 3 4 5 6 7 8 9]
array2:
[[0 1 2 3 4][5 6 7 8 9]]
array3:
[[0 1],
[2 3],
[4 5],
[6 7],
[8 9]]
array2 = array1.reshape(-1, 5)
array3 = array1.reshape(5, -1)
print(array2)
print(array3)
[[0 1 2 3 4],
[5 6 7 8 9]]
[[0 1],
[2 3],
[4 5],
[6 7],
[8 9]]
array2는 array1.reshape(-1, 5)로 로우 인자가 -1, 행 인자가 5이다 이것은 array1과 호환될 수 있는 2차원 ndarray로 변환하고 5개의 칼럼에 맞는 로우를 자동으로 생성하라는 의미이다
array1 = np.arange(8)
array3d = array1.reshape((2, 2, 2))
print('arrayy3d:\n', array3d.tolist())
#3차원 ndarray를 2차원 ndarray로 변환
array5 = array3d.reshape(-1, 1)
print('array5:\n', array5.tolist())
print('array5 shape:',array5.shape)
#1차원 ndarray를 2차원 ndarray로 변환
array6 = array1.reshape(-1,1)
print('array6:\n', array6.tolist())
print('array6 shape:',array6.shape)
arrayy3d:
[[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
array5:
[[0], [1], [2], [3], [4], [5], [6], [7]]
array5 shape: (8, 1)
array6:
[[0], [1], [2], [3], [4], [5], [6], [7]]
array6 shape: (8, 1)
import numpy as np
array1 = np.arange(start = 1, stop=10)
print('array1:', array1)
# index는 0부터 시작하므로 array1[2]는 3번째 index 위치의 데이터값을 의미
value = array1[2]
print('value:',value)
print(type(value))
array1: [1 2 3 4 5 6 7 8 9]
value: 3
<class 'numpy.int32'>
print('맨 뒤의 값:', array1[-1],' 맨 뒤의 값:', array1[-2])
맨 뒤의 값: 9 맨 뒤의 값: 8
array1[0] = 9
array1[8] = 0
print('array1:', array1)
array1: [9 2 3 4 5 6 7 8 0]
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3, 3)
print(array2d)
print('(row=0, col=0) index 가리키는 값:', array2d[0,0])
print('(row=0, col=1) index 가리키는 값:', array2d[0,1])
[[1 2 3],
[4 5 6],
[7 8 9]]
(row=0, col=0) index 가리키는 값: 1
(row=0, col=1) index 가리키는 값: 2
array1 = np.arange(start=1,stop=10)
array3 = array1[0:3]
print(array3)
print(type(array3))
[1 2 3]
<class 'numpy.ndarray'>
->2차원 ndarray인덱싱 예시
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3, 3)
print('array2d:\n', array2d)
print('array2d[0:2, 0:2]\n', array2d[0:2, 0:2])
print('array2d[:, :]\n', array2d[:, :])
print('array2d[:2, 1:]\n', array2d[:2, 1:])
array2d:
[[1 2 3],
[4 5 6],
[7 8 9]]
array2d[0:2, 0:2],
[[1 2],
[4 5]]
array2d[:, :],
[[1 2 3],
[4 5 6],
[7 8 9]],
array2d[:2, 1:],
[[2 3],
[5 6]]
# 팬시 인덱싱
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
array3 = array2d[[0, 1], 2]
print('array2d[[0,1], 2] => ', array3.tolist())
array4 = array2d[[0, 1], 0:2]
print('array2d[[0,1], 0:2]', array4.tolist())
array5 = array2d[[0,1]]
print('array2d[[0, 1]] => ', array5.tolist())
array2d[[0,1], 2] => [3, 6]
array2d[[0,1], 0:2] [[1, 2], [4, 5]]
array2d[[0, 1]] => [[1, 2, 3], [4, 5, 6]]
# 불린 인덱싱
array1d = np.arange(start=1, stop=10)
array3 = array1d[array1d>5]
print('array1d > 5 불린 인덱싱 값 :', array3)
array1d > 5 불린 인덱싱 값 : [6 7 8 9]
org_array=np.array([3, 1, 9, 5])
print('원본 행렬:', org_array)
# np.sort()로 정렬
sort_array1 = np.sort(org_array)
print(sort_array1)
print('np sort로 호출 후 원본 행렬:', org_array)
원본 행렬: [3 1 9 5],
[1 3 5 9]
np sort로 호출 후 원본 행렬: [3 1 9 5]
sort_array2 = org_array.sort()
print('org_array.sort() 호출 후 반환된 행렬:', sort_array2)
print('원본 행렬: ', org_array)
org_array.sort() 호출 후 반환된 행렬: None
원본 행렬: [1 3 5 9]
# 내림차순 정렬
sort_array1_desc = np.sort(org_array)[::-1]
print(sort_array1_desc)
[9 5 3 1]
# 2차원 정렬
array2d = np.array([[8, 12], [7, 1]])
sort_array2d_axis0 = np.sort(array2d, axis=0)
print('로우방향정렬:\n', sort_array2d_axis0)
sort_array2d_axis1 = np.sort(array2d, axis=1)
print('컬럼방향정렬:\n', sort_array2d_axis1)
로우방향정렬:
[[ 7 1],
[ 8 12]]
컬럼방향정렬:
[[ 8 12],
[ 1 7]]
# 정렬된 행렬의 인덱스 반환하기
org_array = np.array([3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print(type(sort_indices))
print(sort_indices)
<class 'numpy.ndarray'>
[1 0 3 2]
=>argsort()로 학생성적을 정렬
name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
score_array = np.array([78, 95, 84, 98, 88])
sort_indices_asc = np.argsort(score_array)
print('성적 정렬시 점수 인덱스:', sort_indices_asc)
print('성적 오름차순 정렬 학생 이름 출력: ', name_array[sort_indices_asc])
성적 정렬시 점수 인덱스: [0 2 4 1 3]
성적 오름차순 정렬 학생 이름 출력: ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']
# 행렬 내적(곱)
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8], [9, 10], [11, 12]])
dot_product = np.dot(A,B)
print(dot_product)
[[ 58 64],
[139 154]]
# 전치 행렬
A = np.array([[1, 2], [3, 4]])
transpose_mat = np.transpose(A)
print('A의 전치행렬:\n', transpose_mat)
A의 전치행렬:
[[1 3],
[2 4]]
Reference 권철민, 파이썬 머신러닝 완벽 가이드, 위키북스2020