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