python
[numpy] 1차원 배열 | 삭제, 추가, 삽입 | np.delete(), np.append(), np.insert()
전감자(◔◡◔)
2022. 9. 28. 18:51
1. 삭제
np.delete() - 위치 값으로 삭제 하는 방법
'''
1. ndarray 삭제
new_arr = np.delete(arr, idx|fancy|slice , axis)
- 삭제된 새로운 ndarray 반환함
- 삭제옵션은 인덱싱,fancy,슬라이싱 모두 가능
슬라이싱 np.s_[start:stop] 형식을 사용
===> 기본적으로 위치값으로 삭제한다.
==> 순방향, 역방향 모두 가능하다.
'''
import numpy as np
# 1. 인덱싱
arr = np.array([9,8,7,6,5,4,3])
new_arr = np.delete(arr, 0) # 순방향
new_arr = np.delete(arr, -1) # 역방향
print(arr, new_arr) # [9 8 7 6 5 4 3] [8 7 6 5 4 3]
# 2. facny ==> 한꺼번에 여러개 삭제
# python
x = [9,8,7,6,5,4,3]
# print(x[[0,3,5]]) TypeError: list indices must be integers or slices, not list
arr = np.array([9,8,7,6,5,4,3])
new_arr = np.delete(arr, [0,3,5]) # 순방향
new_arr = np.delete(arr, [-1,-2,-3]) # 역방향
print(arr, new_arr) # [9 8 7 6 5 4 3] [8 7 5 3]
# 3. 슬라이싱 ==> np.s_[start:stop] 형식
arr = np.array([9,8,7,6,5,4,3])
new_arr = np.delete(arr, np.s_[0:5])
print(arr, new_arr) # [9 8 7 6 5 4 3] [4 3]
np.delete() - 값으로 삭제하는 방법
찾고자 하는 값을 np.where() 안에 다가 넣고 그 위치 값을 np.delete에 넣어 삭제해줄 수 있다.
'''
값으로 삭제하는 방법
1. 삭제할 값의위치를 얻는다.
np.where(arr==5) #arr에서 5값의 위치를 반환
2. np.delete(arr,idx) 이용해서 삭제한다.
'''
import numpy as np
#1. 인덱싱 , 순방향 역방향 모두 가능
arr=np.array([9,8,7,6,5,4,3])
print("5값의 위치:",np.where(arr==5))#5값의 위치: (array([0], dtype=int64),)
new_arr=np.delete(arr,np.where(arr==5))
print("5값의 삭제:",new_arr)#[9 8 7 6 4 3]
print()
print("8과 7의 위치:",np.where((arr==8) | (arr==7)))
new_arr=np.delete(arr,np.where((arr==8) | (arr==7)))
print("8과 7값의 삭제:",new_arr)#[9 6 5 4 3]
2. 추가 및 삽입
np.append(): 행렬의 맨 끝에 값 추가
np. insert(): 행렬의 맨 끝에 값 추가 + idx, fancy, slice를 이용하여 특정 위치에 값을 추가 할 수 있음
'''
배열 추가 및 삭제
1. 추가
np.append(arr,값(리스트포함))
2. 삽입
np.insert(arr,리스트,팬싱,슬라이싱,인덱싱)
'''
import numpy as np
#1. np.append
print("1. np.append(arr,'값')")
arr=np.array([9,8,7,6,5,4,3])
new_arr=np.append(arr,10)#[ 9 8 7 6 5 4 3 10] #기본적으로 병합
new_arr=np.append(arr,[1,2,3])#파이썬 append는 리스트 통채로 들어감
print(new_arr)
#2. np.insert arr:리스트 ,obj:위치
arr=np.array([9,8,7,6,5,4,3])
new_arr=np.insert(arr,0,100)#[100 9 8 7 6 5 4 3]
new_arr=np.insert(arr,[0,2],900)#[900 9 8 900 7 6 5 4 3]
new_arr=np.insert(arr,np.s_[0:3],900)#[900 9 900 8 900 7 6 5 4 3]
#특정 위치에 특정 값 일대일 대응해서 저장
new_arr=np.insert(arr,[0,3],[1,2])
print(new_arr)#0--->1, 3--->2