
먼저 공감되는 짤로 시작-

https://numpy.org/doc/stable/user/absolute_beginners.html
as np로 줄여서 사용import numpy as npnumpy의 array는 동일한 타입으로만 이루어짐 (numpy의 연산을 매우 빠르게 진행하기 위한 것)
numpy array는 여러가지 기본 array 생성 방법이 있음
배열은 values 및 원시 데이터에 대한 정보, 요소를 찾는 방법, 요소를 해석하는 방법, 인덱싱할 수 있는 요소 그리드가 있음
import numpy as np
range_array = np.arange(10)
print(range_array)
[0 1 2 3 4 5 6 7 8 9]
👇와 같이 하나하나 입력해서 사용할 수도 있음
import numpy as np
a = np.arange([1, 2, 3, 4, 5])
print(a)
[1 2 3 4 5]
❗위에서 출력한 a의 타입을 확인해보면
<class 'numpy.ndarray'>
-배열 array 데이터 타입인 것을 확인할 수 있음
-배열은 파이썬의 리스트 데이터 타입에 기반한 것이며, 리스트보다 더 빠른 장점이 있음 (특히 숫자 데이터를 다룰 때 몹시 빠름)
-numpy는 한가지 데이터 타입만 넣을 수 있기 때문에 연산속도가 빠름
-astype()을 사용하여 형변환
data = [1, 2, "3"]
my_arr = np.array(data)
my_arr
array(['1', '2', '3'], dtype='<U21')
# dtype='<U21': 문자열 데이터를 의미
# ' ': 한 가지 데이터 타입으로 자동 통일되는데 위는 문자열로 자동 변경됨
# numpy에서 데이터 타입 변경 (저장 작업 필요)
my_arr = my_arr.astype("float")
my_arr
array([1., 2., 3.])
++ 배열 끝에 값을 추가
++ axis 미지정 시 1차원으로 평탄화 후 추가
1차원 배열 꿑에 추가
arr1 = np.array([1, 2, 3])
new_arr1 = np.append(arr1, [4, 5])
new_arr1
array([1, 2, 3, 4, 5])
2차원 배열 열 추가 (axis=1)
arr2 = np.array([[1, 2], [3, 4]])
col = np.array([[5], [6]])
new_arr2 = np.append(arr2, col, axis=1)
new_arr2
array([[1, 2, 5],
[3, 4, 6]])
++ 지정된 인덱스(obj)에 값 삽입
2차원 배열 행 삽입 (np.insert)
new_arr3 = np.insert(arr2, 1, [9, 9], axis=0)
new_arr3
array([[1, 2],
[9, 9],
[3, 4]])
++ 두 개 이상의 배열을 연결
1차원 배열 연결
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5])
result = np.concatenate((arr1, arr2))
print(result)
[1 2 3 4 5]
2차원 배열 행/열 결합
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
(수직 결합 axis=0)
vertical_stack = np.concatenate((a, b), axis=0)
print(vertical_stack)
[[1 2]
[3 4]
[5 6]]
(수평 결합 axis=1, shape이 일치해야하므로 형태를 (2, 1)로 변경 필요)
shape_table = b.T
horizontal_stack = np.concatenate((a, shape_table), axis=1)
print(horizontal_stack)
[[1 2 5]
[3 4 6]]
❗핵심 특징❗
튜플 사용: 결합할 배열들을 () 안에 튜플 또는 리스트로 묶어 전달해야 함
shape 일치: 결합하려는 축(axis)을 제외한 나머지 차원의 크기가 동일해야 함
반환값: 원본을 수정하지 않고 새로운 배열을 반환
numpy 배열의 요소나 행/열을 삭제할 때
원본의 변경없이 삭제된 새로운 배열을 반환
axis=0: 행 삭제, axis=1: 열 삭제
obj에 인덱스(순번)나 슬라이싱을 전달하여 지정된 위치 삭제 가능
❗- axis를 지정하지 않으면 배열이 1차원으로 펼쳐진 후 삭제되므로 행/열 삭제 시 axis를 반드시 명시해야 함
import numpy as np
(2차원 배열 생성 후 삭제)
# 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 1행(두 번째 행) 삭제
result = np.delete(arr, 1, axis=0)
result
array([[1, 2, 3],
[7, 8, 9]])
# arr 배열에서 0번 열 삭제
result_col = np.delete(arr, 0, axis=1)
result_col
array([[2, 3],
[5, 6],
[8, 9]])
❗핵심 사용법❗
특정 위치 요소 삭제: `new_arr = np.delete(arr, index)
행 삭제(1차원화 주의): np.delete(arr, 1, axis=0) (1번 인덱스 행 삭제
열 삭제: np.delete(arr, 1, axis=1) 1번 인덱스 열 삭제
여러 인덱스 삭제: np.delete(arr, [0, 2], axis=0) 0번과 2번 인덱스 행 삭제
ndarray.ndim: -배열의 축 수(차원) 또는 치수를 알려줌
ndarray.size: 배열의 총 요소 수를 알려줌 (배열 모양의 요소의 곱)
ndarray.shape: -정수 튜플을 표시
-배열의 각 차원을 따라 저장된 요소
-데이터의 행과 열 정보를 확인 (행, 열)
ex. 2개의 행과 3개의 열이 있는 2차원 배열인 경우 배열의 모양은 (2, 3)
arr.reshape(): array 모양 변경
# indexing
data = np.array([1, 2, 3, 4, 5])
data[1]
2
# slicing
data = np.array([1, 2, 3, 4, 5])
data[0:2] # [start:end:step]
array([1, 2])
Der Weg ist das Ziel.
과정이 곧 목표다.
by Heidi J. 꼬꼬마 데분가💜