파이썬에서 배열을 쓰려면 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]
배열끼리 연산도 가능하다