파이썬 배열 – numpy 기초

준비

  • numpy()로 배열 만들기
  • 1D, 2D 및 3D 배열 생성 가능
  • reshpe를 사용하여 배열의 모양을 변경할 수 있습니다.

  • 인덱싱/슬라이싱 가능
  • 배열 간 기본 동작 가능(리스트 동작 불가)
# 라이브러리 불러오기
import numpy as np

– 곱셈

# 배열
a = np.array((1, 2, 3, 4, 5))
print(a)

# 2 곱하기
a = a * 2
print(a)

(1 2 3 4 5)
( 2 4 6 8 10)

– 짝수만 가능

# 배열
a = np.array((1, 2, 3, 4, 5, 6, 7, 8, 9))
print(a)

# 짝수만
a = a(a % 2 == 0)
print(a)

(1 2 3 4 5 6 7 8 9)
(2 4 6 8)

=> 위와 같이 배열을 산술에 사용할 수 있습니다.

1. 어레이 생성

# 1차원 배열

a1 = (1,2,3,4,5)

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

print(type(b1)
print(b1)


(1 2 3 4 5)

# 2차원 배열

# 2차원 리스트 
a2 = ((1, 2, 3), 
      (4, 5, 6))

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

print(type(b2))
print(b2)


((1 2 3)
(4 5 6))

# 3차원 배열

# 3차원 리스트
a3 = (((1, 3, 1),
       (4, 7, 6),
       (8, 3, 4)),
      ((6, 2, 4),  
       (8, 1, 5),
       (3, 5, 9)))

# 배열로 변환
b3 = np.array(a3)

print(tyoe(b3))
print(b3)


(((1 2 3)
(4 7 6)
(8 3 4))

((7 2 4)
(8 1 5)
(3 5 9)))

=> np.array()로 배열 생성

1. 배치 확인

-ndim

# 차원 확인

print(b1.ndim) # 1차원
print(b2.ndim) # 2차원
print(b3.ndim) # 3차원

하나

2

=> ndim으로 차원 수를 확인할 수 있습니다.

– 모양

# 형태(크기) 확인

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

(5,)
(2, 3)
(2, 3, 3)

=> (m, ) : m개의 셀로 구성된 1차원 배열 : 5개의 셀로 구성된 1차원 배열

=> (m,n): m행 n열의 2D 배열: 2행 3열의 2D 배열

=> (z, m, n): z 레이어, m 행, n으로 구성된 3D 배열 : 2 레이어, 3 행, 3 열로 구성된 3D 배열

-dtyp

# 요소 자료형 형식 확인

print(b1.dtype)
print(b2.dtype)
print(b3.dtype)

int32

int32

int32

=> 배열 요소의 데이터 유형, 배열은 하나의 데이터 유형만 가질 수 있습니다.

2. 재정렬 – reshape()

# (2, 3) 형태의 2차원 배열 
b2 = np.array(((1, 2, 3), 
              (4, 5, 6)))

print(b2)

((1 2 3)
(4 5 6))

  • (2, 3) → (3, 2) 재정렬
# (3, 2) 형태의 2차원 배열로 Reshape
c2 = b2.reshape(3,2)

# 확인
print(c2)

((1 2)
(3 4)
(5 6))

  • (3, 2) → (6, ) 재정렬
# (3, 2) -> 1차원 배열
c3 = c2.reshape(6,)

# 확인
print(c3)

(1 2 3 4 5 6)

*** -1회 사용 : 하나의 행 또는 열 크기만 지정할 수 있습니다.

예) (m, -1) 또는 (-1, n)

# (2, 3) 형태의 2차원 배열 
b2 = np.array(((1, 2, 3), 
              (4, 5, 6)))

print(b2)

((1 2 3)
(4 5 6))

# (-1, n)
c4 = b2.reshape(-1,2)
print(c4)

((1 2)
(3 4)
(5 6))

# (-1, n)
c5 = b2.reshape(-1,3)
print(c5)

((1 2 3)
(4 5 6))

# (m, -1)
c6 = b2.reshape(1,-1)
print(c6)

((1 2 3 4 5 6))

=> -1은 m, n 및 크기의 사양에 따라 변경됩니다.

3. 인덱싱/슬라이싱

# 2차원 배열
b2 = np.array(((1, 2, 3), 
              (4, 5, 6)))

((1 2 3)
(4 5 6))

  • 인덱싱
print('첫 번째 행, 두 번째 열 요소 조회')
print(b2(0, 1))

print('='*20)

print('첫 번째, 두 번째 행 조회')
print(b2((0, 1))) # print(b2((0, 1), :)) 와 같음

print('='*20)

print('첫 번째, 두 번째 열 조회')
print(b2(:, (0, 1)))

print('='*20)

print('두 번째 행 첫 번째 열의 요소 조회')
print(b2((1), (0)))

첫 번째 줄, 두 번째 열 요소 검색
2
=====================
첫 번째, 두 번째 줄에서 검색
((1 2 3)
(4 5 6))
=====================
첫 번째 열과 두 번째 열을 조회합니다.


((1 2)
(4 5))
=====================
두 번째 행의 첫 번째 열 요소 가져오기
(4)

=> 다른 인덱스와 마찬가지로 행과 열 모두 0부터 시작합니다.

  • 자르다
print('첫 번째 ~ 두 번째 행 조회')
print(b2(0:2))

print('='*20)

print('첫 번째 행, 첫번 째 ~ 두 번째 열 조회')
print(b2(0, 0:2))

print('='*20)

print('첫 번째 ~ 두 번째 행, 두 번째 ~ 세 번째 열 조회')
print(b2(:, (0, 1)))

1~2줄 검색
((1 2 3)
(4 5 6))
=====================
1행 1~2열 검색
(1 2)
=====================
1~2줄, 2~3열 쿼리
((1 2)
(4 5))

4. 운영

  • 배열은 요소별로 편집할 수 있습니다(더하기, 빼기, 곱하기, 나누기, 제곱).
# (2, 2) 형태의 2차원 배열 x, y
x = np.array(((1, 2), (3, 4)))
y = np.array(((5, 6), (7, 8)))

print('x 배열')
print(x)
print()
print('y 배열')
print(y)

x 배열
((1 2)
(3 4))

y 배열
((5 6)
(7 8))

# 더하기
print(x+y) # or print(np.add(x, y))

(( 6 8)
(10 12))

=> 요소별 추가

# 배열 빼기
print(x - y) # or print(np.subtract(x, y))

((-4 -4)
(-4 -4))

=> 요소별 빼기

# 배열 곱하기
print(x * y) # or print(np.multiply(x, y))

((5 12)
(21 32))

=> 요소별 곱셈

# 배열 나누기
print(x / y)   # or print(np.divide(x, y))

((0.2 0.33333333)
(0.42857143 0.5 ))

=> 요소로 나누기

# 배열 y 제곱
print(x ** y)    # or print(np.power(x, y))

(( 164)
( 2187 65536))

=> 요소당 x^y

# 배열 제곱
print(x ** 2)

((14)
(9 16))

=> 항목당 x^2