프로그래밍/python

Python_배열(numpy)

gunnwu 2023. 2. 11. 17:56

파이썬에서 배열을 활용하기 위해 numpy 라이브러리를 사용

# numpy 불러오기 주로 np라는 별칭을 사용

import numpy as np

1. 배열을 왜 사용하는가? 

1-1. 리스트로는 반복문을 사용해야할 연산이 배열을 활용하면 간단하게 해결가능(다만 행렬의 곱합은 단순 연산x)

# 리스트
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 짝수 구하기
[x for x in a if x%2==0]

#배열 활용
b = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 확인
print(b)

# 짝수만 표시
print(b[ b%2==0 ])

 

1-2. 리스트로부터 배열을 만들거나 , 머신러닝 관련 함수 결과값이 배열이 된다.

 

2. 용어정의

  • axis : n차원 배열을 구성하는 요소 (= 축)
  • axis=0 2차원 배열에서는 행,  3차원 배열에서는 높이 (물건을 위로쌓는다)
  • 배열의 덧셈에서 axis=0은 열기준 합계 ==> 행을 더한다
  • axis=1 열 (물건을 옆으로 정리한다)
  • rank: 축의 개수
  • shape: 축의 길이, 배열의 크기
  • ndim : 배열의 차원확인 ex) print(a.ndim)
  • dtype : 배열에 포함된 요소들의 자료형 확인(배열은 한가지 자료형만 가질 수 있음) ex) print(a.dtype)

 

#2차원 배열
a = [[1, 2, 3], 
      [4, 5, 6]]

# 배열로 변환
b = np.array(a)

# 확인
print(b)
print(b.shape) # 2행 3열의 2차원 배열

print('-'*15)

#3차원 배열
x = [[[1, 2, 3],
       [4, 5, 6],
       [8, 7, 9]],
      [[4, 2, 5],  
       [8, 3, 5],
       [3, 9, 5]]]

# 배열로 변환
y = np.array(x)

# 확인
print(y)
print(y.shape) # 실행결과 (2,3,3) => ( axis 0, axis 1, axis 2) 2층 높이의 3행 3열 배열

실행결과

3. reshape

배열에 포함된 요소 개수만 변하지 않는다면 배열의 형태를 자유롭게 변환가능

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

print(a)

print('-'*15)

#(3,2)형태로 reshape

a1 = a.reshape(3,2)
print(a1)

print('-'*15)

#(6,)형태로 reshape

a2 = a.reshape(6,)
print(a2)

print('-'*15)

#(3,-1)==>? 3행으로 된 배열로 변환
print(a.reshape(3, -1))

실행결과

4. 배열도 인덱싱과 슬라이싱이 가능하다.

  • 배열 [행, 열]  => 특정 위치의 요소 조회
  • 배열 [[행1,행2,..], :] 또는 배열 [[행1,행2,..]]  => 특정 행을 조회.
  • 배열 [:, [열1,열2,...]] => 특정 열을 조회.
  • 배열 [[행1,행2,...], [열1,열2,...]] => 특정 행의 특정 열을 조회
#배열 인덱싱

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

print('-'*15)

#1행 2열의 요소 조회
print(a[0,1])

print('-'*15)

#1행, 2행 조회
print(a[[0,1]])

print('-'*15)

#1행, 2행, 3행 조회
print(a[[0, 1, 2]])

print('-'*15)

#1열 2열 조회
print(a[:, [0, 1]])

print('-'*15)

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

print('-'*15)

#3행 2열 요소 조회
print(a[[2], [1]])

print('-'*15)

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

print('-'*15)

# 1행 1열, 2행 2열, 3행 1열의 요소 조회
print(a[[0, 1, 2], [0, 1, 0]])

실행결과

#배열 슬라이싱

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

print('-'*15)

# 1행~ 2행 조회
print(a[0:2, :])
print(a[0:2])

print('-'*15)

# 1행, 1열 ~ 2열 조회
print(a[0, 0:2])

print('-'*15)

# 1행 ~ 3행, 2열 ~ 3열 조회
print(a[0:3, 1:3])

print('-'*15)

# 2행~ 마지막행, 2열 ~ 마지막 열 조회
print(a[1:, 1:])

실행결과