python
[numpy] 2차원 배열 | 삭제, 추가, 삽입 | np.delete(), np.append(), np.insert()
전감자(◔◡◔)
2022. 9. 28. 19:09
1. 삭제
-2차원에서의 삭제는 1차원과 다르게 축 (axis)을 설정해주지 않으면 flatting 된다는 것을 기억해야한다.
'''
1. ndarray 삭제 ( axis 개념 반드시 이해하기 )
new_arr = np.delete(arr, idx|fancy|slice , axis=None|0|1)
- 삭제된 새로운 ndarray 반환함
- 삭제옵션은 인덱싱,fancy,슬라이싱 모두 가능
슬라이싱 np.s_[start:stop] 형식을 사용
===> 기본적으로 위치값으로 삭제한다.
==> 순방향, 역방향 모두 가능하다.
==> axis=None 기본 ( 일반적인 기본값은 axis=0 )이다.
axis값을 지정하지 않으면 flat된다. ( 1차원으로 변경 )
==> axis=0 ==> 행이 삭제
==> axis=1 ==> 열이 삭제
'''
import numpy as np
arr = np.arange(25).reshape((5,5))
print(arr)
'''
[[ 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]]
'''
# 가. axis=None (기본 )
# 1. idx 삭제
new_arr = np.delete(arr, -1)
print(new_arr) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
# 2. fancy 삭제
new_arr = np.delete(arr, [0,-1])
print(new_arr) # [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
# 3. 슬라이싱 삭제
new_arr = np.delete(arr, np.s_[:8])
print(new_arr) # [ 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
'''
[[ 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]]
'''
# 나. axis=0 ==> 행 삭제
# 1. idx 삭제
new_arr = np.delete(arr, -1, axis=0) # 가장 마지막 행 삭제
print(new_arr)
'''
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
'''
# 2. fancy 삭제
new_arr = np.delete(arr, [0,-1], axis=0) # 첫번째 행과 마지막 행 삭제
print(new_arr)
'''
[[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
'''
# 3. 슬라이싱 삭제
new_arr = np.delete(arr, np.s_[:3], axis=0) # 0행 ~ 2행 삭제
print(new_arr)
'''
[[15 16 17 18 19]
[20 21 22 23 24]]
'''
'''
[[ 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]]
'''
# 다. axis=1 ==> 열 삭제
# 1. idx 삭제
new_arr = np.delete(arr, -1, axis=1) # 가장 마지막 열 삭제
print(new_arr)
'''
[[ 0 1 2 3]
[ 5 6 7 8]
[10 11 12 13]
[15 16 17 18]
[20 21 22 23]]
'''
# 2. fancy 삭제
new_arr = np.delete(arr, [0,-1], axis=1) # 첫번째 열과 마지막 열 삭제
print(new_arr)
'''
[[ 1 2 3]
[ 6 7 8]
[11 12 13]
[16 17 18]
[21 22 23]]
'''
# 3. 슬라이싱 삭제
new_arr = np.delete(arr, np.s_[:3], axis=1) # 0행 ~ 2행 삭제
print(new_arr)
'''
[[ 3 4]
[ 8 9]
[13 14]
[18 19]
[23 24]]
'''
2. 추가 및 삽입
삭제와 마찬가지로 axis를 설정해주지 않으면 flatting되고 ,
axis를 설정하여 추가 및 삽입을 하게되면 연산 개수를 맞추기 위해서 자동으로 broadcasting 된다
'''
배열 추가 및 삭제
1. 추가
np.append(arr,값(리스트포함),axis=None|0|1)
axis=None이면 flat 된 후에 추가된다.
axis=0이면 행 추가 (주의할 점은 dimension 일치해야한다.)
2. 삽입
np.insert(arr,리스트,팬싱,슬라이싱,인덱싱)
'''
import numpy as np
arr=np.arange(6).reshape((-1,3))
print(arr)
'''
[[0 1 2]
[3 4 5]]
'''
# 가. axis=None ==> flat 된 후 처리됨
new_arr=np.append(arr,100)
print(new_arr)#[ 0 1 2 3 4 5 100]
new_arr=np.append(arr,[100,200,300])#[ 0 1 2 3 4 5 100 200 300]
print(new_arr)
# 나. axis=0 ==> 행 추가
#2차원 배열에 행을 추가할 때는 2차원 형태로 저장해야한다.
#new_arr=np.append(arr,[100,200,300],axis=0) #1차원 형태로 넣으면 안된다.#ValueError
new_arr=np.append(arr,[[100,200,300]],axis=0)#[ 0 1 2 3 4 5 100 200 300]
new_arr=np.append(arr,[[100,200,300],[1,2,3],[243,453,567]],axis=0)
print(new_arr)
'''
[[ 0 1 2]
[ 3 4 5]
[100 200 300]]
'''
# 나. axis=1 ==> 열 추가
# 2차원 배열에 열을 추가 할 때는 2차원 형태로 지정해야 된다.
'''
[[0 1 2]
[3 4 5]]
'''
new_arr=np.append(arr,[[100],[200]],axis=1)
new_arr=np.append(arr,[[100,99,98],[200,198,199]],axis=1)
print(new_arr)
'''
[[ 0 1 2 100] [[ 0 1 2 100 99 98]
[ 3 4 5 200]] [ 3 4 5 200 198 199]]
'''
### 삽입
# 가. axis=None ==> flat된 후 처리됨
new_arr=np.insert(arr,0,100)
print(new_arr)#[100 0 1 2 3 4 5]
print()
# 나. axis=0 ==> 특정 위치에 행 추가
# 브로드캐스팅(broadcasting): 연산하기 위해서 갯수를 자동으로 증가시킴 (demension 을 자동으로 맞춤)
new_arr=np.insert(arr,0,99,axis=0)
print(new_arr)
'''
[[99 99 99]
[ 0 1 2]
[ 3 4 5]]
'''
# 나. axis=1 ==> 특정 위치에 열 삽입
# 브로드캐스팅(broadcasting): 연산하기 위해서 갯수를 자동으로 증가시킴 (demension 을 자동으로 맞춤)
new_arr=np.insert(arr,0,99,axis=1)
print(new_arr)
'''
[[99 0 1 2]
[99 3 4 5]]
'''