상세 컨텐츠

본문 제목

NUMPY 기초 문법 정리3_배열 값 삽입/수정/삭제/복사

PYTHON/NUMPY

by mk coding 2024. 1. 19. 20:50

본문

배열 값 삽입

  • insert() : 배열의 특정 위치에 값 삽입
  • axis를 지정하지 않으면 1차원 배열로 변환
  • 추가할 방향을 axis로 지정
    • axis = 0 -> 행 방향으로 추가 
    • axis = 1 -> 열 방향으로 추가 
  • 원본 배열 변경없이 새로운 배열 반환

코드

print("a2배열: \n", a2)
b2 = np.insert(a2, 1, 10, axis = 0)
print("\naxis = 0 -> 행 삽입\n", b2)
c2 = np.insert(a2, 1, 10, axis = 1)
print("\naxis = 1 -> 열 삽입\n", c2)
d2 = np.insert(a2, (0, 1, 2), 10, axis = 0) 
# 맨 첫번째 인덱스를 기준으로 0-> 바로 앞, 1-> 1칸뒤 2-> 2칸뒤 
print("\nobject에 시퀀스로 들어갔을 때\n", d2)
e2 = np.insert(a2, [0, 1, 2], 10, axis = 0) 
# 맨 첫번째 인덱스를 기준으로 0-> 바로 앞, 1-> 1칸뒤 2-> 2칸뒤 
print("\nobject에 시퀀스로 들어갔을 때\n", e2)

 

결과

더보기
a2배열: 
 [[1 2 3]
 [4 2 6]
 [7 8 9]]

axis = 0 -> 행 삽입
 [[ 1  2  3]
 [10 10 10]
 [ 4  2  6]
 [ 7  8  9]]

axis = 1 -> 열 삽입
 [[ 1 10  2  3]
 [ 4 10  2  6]
 [ 7 10  8  9]]

object에 시퀀스로 들어갔을 때
 [[10 10 10]
 [ 1  2  3]
 [10 10 10]
 [ 4  2  6]
 [10 10 10]
 [ 7  8  9]]

object에 시퀀스로 들어갔을 때
 [[10 10 10]
 [ 1  2  3]
 [10 10 10]
 [ 4  2  6]
 [10 10 10]
 [ 7  8  9]]

배열 값 수정

  • 배열의 인덱싱으로 접근하여 값 수정

코드

print("a1배열: ", a1)
a1[0] = 2
a1[1] = 3
a1[2] = 4
print("인덱싱으로 접근해 값 수정 후 a1배열: ", a1)
a1[:1] = 9
print("슬라이싱으로 접근해 값 수정 후 a1배열: ", a1)
i = np.array([1, 3, 4])
a1[i] = 0
print("fancy 인덱싱으로 접근해 값 수정 후 a1배열: ", a1)
a1[i] += 4
print("fancy 인덱싱으로 접근해 값 수정 후 a1배열: ", a1)

print("-"*50)

print("a2배열 \n", a2)
a2[0, 0] = 1
a2[1, 1] = 2
a2[2, 2] = 3
a2[0] = 1
print("\n인덱싱으로 접근해 값 수정 후 a2배열\n", a2)
a2[1:, 2] = 9
print("\n슬라이싱으로 접근해 값 수정 후 a2배열\n", a2)
row = np.array([0, 1])
col = np.array([1, 2])
a2[row, col] = 0
print("\nfancy 인덱싱으로 접근해 값 수정 후 a2배열\n", a2)

 

설명

더보기
a1배열:  [1 2 3 4 5]
인덱싱으로 접근해 값 수정 후 a1배열:  [2 3 4 4 5]
슬라이싱으로 접근해 값 수정 후 a1배열:  [9 3 4 4 5]
fancy 인덱싱으로 접근해 값 수정 후 a1배열:  [9 0 4 0 0]
fancy 인덱싱으로 접근해 값 수정 후 a1배열:  [9 4 4 4 4]
--------------------------------------------------
a2배열 
 [[1 0 1]
 [4 2 0]
 [7 8 9]]

인덱싱으로 접근해 값 수정 후 a2배열
 [[1 1 1]
 [4 2 0]
 [7 8 3]]

슬라이싱으로 접근해 값 수정 후 a2배열
 [[1 1 1]
 [4 2 9]
 [7 8 9]]

fancy 인덱싱으로 접근해 값 수정 후 a2배열
 [[1 0 1]
 [4 2 0]
 [7 8 9]]

배열 값 삭제

  • delete() : 배열의 특정 위치에 값 삭제
  • axis를 지정하지 않으면 1차원 배열로 변환
  • 삭제할 방향을 axis로 지정
    • axis = 0 -> 행 방향으로 추가 
    • axis = 1 -> 열 방향으로 추가 
  • 원본 배열 변경없이 새로운 배열 반환

코드

print("a1배열 ", a1)
b1 = np.delete(a1, 3)
print("3번 인덱스 제거한 배열 ", b1)
print("원래 배열은 그대로 ", a1)

print("-"*50)

print("\na2배열 \n", a2)
b2 = np.delete(a2, 1, axis=0)
print("\n1번 인덱스 행 삭제\n", b2)
c2 = np.delete(a2, 1, axis=1)
print("\n1번 인덱스 열 삭제\n", c2)

 

설명

더보기
a1배열  [1 2 3 4 5]
3번 인덱스 제거한 배열  [1 2 3 5]
원래 배열은 그대로  [1 2 3 4 5]
--------------------------------------------------

a2배열 
 [[1 0 1]
 [4 2 0]
 [7 8 9]]

1번 인덱스 행 삭제
 [[1 0 1]
 [7 8 9]]

1번 인덱스 열 삭제
 [[1 1]
 [4 0]
 [7 9]]

배열 복사

  • 리스트 자료형과 달리 배열의 슬라이스는 복사본이 아님

코드

print("a2배열\n", a2)
print("\na2배열 슬라이싱\n", a2[:2, :2])
a2_sub = a2[:2, :2]
print("\na2배열 슬라이싱해서 변수에 대입\n", a2_sub)
a2_sub[:, 1] = 2
print("\n슬라이싱한 배열 값 변경\n", a2_sub)
print("\na2_sub을 바꿨는데 a2도 같이 바뀜\n", a2)

 

결과

더보기
a2배열
 [[1 2 3]
 [4 2 6]
 [7 8 9]]

a2배열 슬라이싱
 [[1 2]
 [4 2]]

a2배열 슬라이싱해서 변수에 대입
 [[1 2]
 [4 2]]

슬라이싱한 배열 값 변경
 [[1 2]
 [4 2]]

a2_sub을 바꿨는데 a2도 같이 바뀜
 [[1 2 3]
 [4 2 6]
 [7 8 9]]
  • copy() : 배열이나 하위 배열 내의 값을 명시적으로 복사

코드

print("a2배열\n", a2)
a2_sub_copy = a2[:2, :2].copy()
print("\na2배열 복사본\n", a2_sub_copy)
a2_sub_copy[:, 1] = 1
print("\n복사한 변수를 값 변경\n", a2_sub_copy)
print("\na2_sub을 바꿨는데 a2는 바뀌지 않음\n ", a2)

 

결과

더보기
a2배열
 [[1 2 3]
 [4 2 6]
 [7 8 9]]

a2배열 복사본
 [[1 2]
 [4 2]]

복사한 변수를 값 변경
 [[1 1]
 [4 1]]

a2_sub을 바꿨는데 a2는 바뀌지 않음
  [[1 2 3]
 [4 2 6]
 [7 8 9]]

 

출처 : 이수안 컴퓨터 연구소

관련글 더보기