파이썬 Numpy 배열 인덱싱/슬라이싱

2021. 8. 9. 01:30
728x90
반응형

numpy 배열 준비

lst1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
arr1 = np.array(lst1)

 

| array[a:b, c:d]

a ~ b-1, c ~ d-1 까지의 배열을 조회한다.

print(arr1[0:2, 0:2])

print : [[1 2]

            [4 5]]

 

위의 배열에서 0, 1번 행 0, 1번 열의 데이터를 조회한다.

| array[a:, b:]

a번 부터 그 이후의 행과 , b번 부터 그 이후의 열을 조회한다.

print(arr1[1:, 2:])

print : [[ 6]

            [ 9]

            [ 12]]

 

1번 부터 이후의 행과, 2번 부터 이후의 열을 조회한다.

|  array[a, : ]

아무것도 표시하지 않거나 '', ':' 기호는 전체를 뜻하며  a행의 전체 열 데이터를 조회한다.

print(arr1[0])
print(arr1[0, ])
print(arr1[0, :])

print : [1 2 3]

print : [1 2 3]

print : [1 2 3]

 

단, 행이 비어 있는 구조는 불가능하다.

print(arr1[, 0])

print : invalid syntax

문법오류 발생

 

이를 표현하기 위해서는 ':' 기호가 쓰인다.

print(arr1[:, 0])

print : [1 4 7 10]

 

 

리스트를 복사할 때는 '='를 통해 복사한다.(주소가 복사됨)

arr2 = np.arange(7)
arr3 = arr2[1:5]
print(arr2)
print(arr3)

arr3[2] = 10
print(arr2)
print(arr3)

print : [0 1 2 3 4 5 6]

print : [1 2 3 4]

 

print : [0 1 2 10 4 5 6]

print : [1 2 10 4]

# arr3의 2번 행의 값을 10으로 변경하였는데, arr2의 3번 행의 값도 같이 변경되었다.(주소를 복사한 것이기 때문)

 

| arr[a:b].copy()

이 현상을 방지하기 위해  copy 함수를 사용한다.

arr2 = np.arange(7)
arr3 = arr2[1:5].copy()
print(arr2)
print(arr3)

arr3[2] = 10
print(arr2)
print(arr3)

print : [0 1 2 3 4 5 6]

print : [1 2 3 4]

 

print : [0 1 2 3 4 5 6]

print : [1 2 10 4]

# copy함수를 쓰면 값만 복사하기 때문에,

arr3의 2번 행의 값이 바뀌었음에도 arr2의 3번 행의 값은 바뀌지 않은 것을 확인할 수 있다.

 

| array[a, b]

선택한 인덱스를 조회한다.

arr1 : [[ 1 2 3]

           [ 4 5 6]

           [ 7 8 9]

           [ 10 11 12]]

print(arr1[0, 2])

print : 3

#0행 2열의 값

 

| array[[a, b], [c, d]]

array의 a행 c열의 값 및 b행 d열의 값을 조회한다.

print(arr1[[0, 2], [1, 2]])

print : [2 9]

# array [0,1] 그리고 array[2,2]의 값을 조회한다.

728x90
반응형

'IT > 파이썬' 카테고리의 다른 글

파이썬 Numpy 배열 생성 함수  (0) 2021.08.08
파이썬 Numpy 배열  (0) 2021.08.08
파이썬 Numpy 설치  (0) 2021.08.08
파이썬 모듈 사용하기  (0) 2021.08.07
파이썬 모듈 import  (0) 2021.08.07

BELATED ARTICLES

more