프로그래밍/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:])