데이터 다듬기

파이썬의 배열 numpy 정리

chacha001 2024. 9. 17. 00:22

 

파이썬에서 배열을 쓰려면 numpy로 써야한다

 

# 라이브러리 불러오기
import numpy as np

 

리스트가 있는데, 굳이 라이브러리를 불러와서 배열을 쓰는이유는 리스트는 못하는걸 할 수 있기 때문이다.

예를들어서

 

a = [1,2,3,4,5]
a = a * 2

 

리스트는 이걸 출력하면 하나씩 곱하는게 아니라 리스트 자체를 한번 더 이어붙여서

[1,2,3,4,5,1,2,3,4,5]

이렇게 출력된다.

 

그리고 np는 바로 짝수를 골라서 출력도 가능하다.

 

a = np.array([1,2,3,4,5])

print(a[a % 2 == 0])

 

 

 

배열 만들기

-> np.array()함수로 만들면 된다.

# 1차원 리스트
a1 = [1, 2, 3, 4, 5]

# 배열로 변환
b1 = np.array(a1)

# 2차원 리스트
a2 = [[1.5, 2.5, 3.2],
      [4.2, 5.7, 6.4]]

# 배열로 변환
b2 = np.array(a2)

 

 

 

배열 관련 메소드

 

#차원확인
print(b1.ndim)
print(b2.ndim)

#형태(크기) 확인 
'''
결과는 다음과 같은 형태의 튜플로 표시됨.
1차원: (x, )
2차원: (x, y)
3차원: (x, y, z)
앞에서 부터 axis 0, axis 1, axis 2의 크기를 의미.
'''

print(b1.shape)
print(b2.shape)

# 배열 요소의 자료형 확인. 배열은 리스트와 다르게 한개의 배열당 한개의 자료형만 가진다.
print(b1.dtype)
print(b2.dtype)

 

 

Reshape - 형태 변환

1 2 3
4 5 6

이런 (2,3) 배열을 

1 2
3 4
5 6

 (3,2)로 바꿀 수 있다.

a = np.array([[1, 2, 3],
              [4, 5, 6]])

              
b = a.reshape(3,2)

 

  • - 참고로 (6) 으로 하면 1차원 배열이 되고, (6,1) 로 하면 6행1열 2차원 배열이 된다.
  • (m, -1) 또는 (-1, n) 처럼 사용해 행 또는 열 크기 한 쪽만 지정할 수 있다.

 

 

 

 

인덱싱

  • 1차원 배열은 리스트와 방법이 같다.

 

# (3, 3) 형태의 2차원 배열
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
              
              
              
# 첫 번째 행, 두 번째 열 요소 조회
print(a[0, 1])

# 첫 번째, 두 번째 행 조회
# print(a[[0, 1], :])
print(a[[0, 1]])

# 첫 번째, 두 번째, 세 번째 행 조회
# print(a[[0, 1, 2], :])
print(a[[0, 1, 2]])

# 첫 번째, 두 번째 열 조회
print(a[:, [0, 1]])

# 두 번째 행 두 번째 열의 요소 조회
print(a[[1], [1]])

# 첫 번째 행 첫 번째 열, 두 번째 행 두 번째 열의 요소 조회
print(a[[0, 1], [0, 1]])

# 첫 전째 행 첫 번째 열, 두 번째 행 두 번째 열, 세 번째 행 첫 번째 열의 요소 조회
print(a[[0, 1, 2], [0, 1, 0]])

 

 

위의 출력 결과:

2

[[1 2 3]
 [4 5 6]]

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[1 2]
 [4 5]
 [7 8]]

[5]

[1 5]

[1 5 7]

  • print(a[[0, 1, 2], [0, 1, 0]])은  [0,0] , [1,1] , [2,0] 으로 생각하면 쉽다. ^^

 

 

 

 

 

 

 

 

슬라이싱

  • 배열[행1:행N,열1:열N] 형태로 지정해 그 위치의 요소를 조회한다.
  • 조회 결과는 2차원 배열이 된다.
  • 마지막 범위 값은 대상에 포함되지 않는다.
  • 즉, **배열[1:M, 2:N]**이라면 1 ~ M-1행, 2 ~ N-1열이 조회 대상이 됩니다.

 

# (3, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

# 첫 번째 ~ 두 번째 행 조회
# print(a[0:2, :])
print(a[0:2])

# 첫 번째 행, 첫 번째 ~ 두 번째 열 조회
print(a[0, 0:2])

# 첫 번째 ~ 세 번째 행, 두 번째 ~ 세 번째 열 조회
print(a[0:3, 1:3])

# 두 번째 ~ 끝 행, 두 번째 ~ 끝 열 조회
print(a[1:, 1:])

# 조건 조회도 가능하다
print(a[a>= 5])

 

 

출력결과:

 

[[1 2 3]
 [4 5 6]]

[1 2]

[[2 3]
 [5 6]
 [8 9]]

[[5 6]
 [8 9]]

[5 6 7 8 9]

 

 

배열끼리 연산도 가능하다 

 

 

 

 

 

 

 

 

'데이터 다듬기' 카테고리의 다른 글

데이터프레임  (1) 2024.09.17