Slicing - 잘라서 가져오기

import numpy as np
x = np.array([ 3,  6,  3,  5, 13,  9, 19])
X = np.array([[69, 10, 98, 68, 32],
               [14, 56, 73, 48, 69],
               [36, 48, 40, 28, 90],
               [45, 47, 65, 12, 95]])
               
x[1:4]
# array([6, 3, 5])

X[0:3,0:3]
# array([[69, 10, 98],
#        [14, 56, 73],
#        [36, 48, 40]])

boolean 연산

# 80보다 큰 데이터는 몇개입니까
(X > 80).sum()
# 3

# 80보다 큰 데이터를 가져오시요
X[X > 80]
#array([98, 90, 95])

Arithmetic operations and Broadcasting

2차원 배열 연산

import numpy as np
X = np.random.randint(1, 10 ,(2, 2))
Y = np.random.randint(100, 150, (2, 2))

X
# array([[7, 8],
#        [6, 3]])

Y
# array([[123, 103],
#        [131, 147]])

X + Y
# array([[112, 135],
#        [151, 130]])

X - Y
# array([[-104, -129],
#        [-147, -128]])
       
X * Y
# array([[432, 396],
#        [298, 129]])
    
X / Y
# array([[0.03703704, 0.02272727],
#        [0.01342282, 0.00775194]])

Accessing, Deleting, and Inserting Elements Into ndarrays

x = np.random.randint(1, 20, 7)
# array([ 3,  6,  3,  5, 13,  9, 19])

x[3]
# 5

x[-1]
# 19

다차원배열의 인덱스 접근

X = np.random.randint(0, 100, (5, 5))
# array([[39, 48, 91,  8,  8],
#        [12,  7, 70, 25, 69],
#        [54, 77, 71, 92, 73],
#        [12, 20, 39, 45, 53],
#        [ 1, 57, 95, 31, 87]])

X[0,2]
# 91

항목 삭제

x = np.array([ 3,  6,  3,  5, 13,  9, 19])
np.delete(x, 3)
# array([ 3,  6,  3, 13,  9, 19])

X = np.array([[69, 10, 98, 68, 32],
              [14, 56, 73, 48, 69],
              [36, 48, 40, 28, 90],
              [45, 47, 65, 12, 95]])

np.delete(X, 2, axis = 0)
# array([[69, 10, 98, 68, 32],
#        [14, 56, 73, 48, 69],
#        [45, 47, 65, 12, 95]])

np.delete(X, 1, axis = 1)
# array([[69, 98, 68, 32],
#        [14, 73, 48, 69],
#        [36, 40, 28, 90],
#        [45, 65, 12, 95]])

항목을 끝에 추가하기

a = np.arange(5)
a = a.reshape(1, 5)

np.append(X, a, axis = 0)
# array([[69, 10, 98, 68, 32],
#        [14, 56, 73, 48, 69],
#        [36, 48, 40, 28, 90],
#        [45, 47, 65, 12, 95],
#        [ 0,  1,  2,  3,  4]])

b = np.arange(4)
b = b.reshape(4, 1)

np.append(X, b, axis = 1)
# array([[69, 10, 98, 68, 32,  0],
#        [14, 56, 73, 48, 69,  1],
#        [36, 48, 40, 28, 90,  2],
#        [45, 47, 65, 12, 95,  3]])

항목을 원하는 위치에 추가하기

np.insert(X, 1, a, axis = 0)
# array([[69, 10, 98, 68, 32],
#        [ 0,  1,  2,  3,  4],
#        [14, 56, 73, 48, 69],
#        [36, 48, 40, 28, 90],
#        [45, 47, 65, 12, 95]])

np.insert(X, 1, b, axis=1)
# array([[69,  0, 10, 98, 68, 32],
#        [14,  1, 56, 73, 48, 69],
#        [36,  2, 48, 40, 28, 90],
#        [45,  3, 47, 65, 12, 95]])

데이터 전체에서 최댓값, 최솟값, 전체합, 전체평균, 표준편차을 구하세요

import numpy as np
X = np.random.randint(1, 100, (4,5))
# array([[73, 52, 45, 32, 40],
#        [22,  5,  8, 11, 56],
#        [58,  1, 95, 22, 36],
#        [ 1, 78, 47, 45, 63]])

X.max()
# 95

X.min()
# 91

X.sum()
# 790

X.mean()
# 39.5

X.std()
# 26.23451924468981

np.median(X)
# 42.5
# 행별로 최대값을 구하세요
X.max(axis = 1)
# array([73, 56, 95, 78])

# 열별로 sum 값을 구하세요
X.sum(axis = 0)
# array([154, 136, 195, 110, 195])

# X에 70보다 큰 데이터는 몇개가 있나요?
(X > 70).sum()
# 3

# X 의 데이터 중에서 70보다 큰 데이터만 가져오시오
X[X > 70]
# array([73, 95, 78])

특정 값으로, 행렬 만들기

# 6 으로 10개짜리 1차원 배열을 만드세요
np.full(10,6)
# array([6, 6, 6, 6, 6, 6, 6, 6, 6, 6])

# 6 으로 채워진 2행 3열짜리 행렬을 만드세요
np.full((2, 3), 6)
# array([[6, 6, 6],
#        [6, 6, 6]])

0과 1로 채우기

np.ones((3, 5))
# array([[1., 1., 1., 1., 1.],
#        [1., 1., 1., 1., 1.],
#        [1., 1., 1., 1., 1.]])
       
np.zeros((3,5))
# array([[0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 0.]])

정수의 배열을 얻고자 할때

np.arange(9 + 1)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 3부터 20까지의 정수중 홀수만 만드세요
np.arange(3, 20 + 1, 2)
# array([ 3,  5,  7,  9, 11, 13, 15, 17, 19])

정수 말고 실수를 얻고자 할때

# 0부터 25까지의 실수 10개를 가져오세요
np.linspace(0, 25, 10)
# array([ 0.        ,  2.77777778,  5.55555556,  8.33333333, 11.11111111,
#        13.88888889, 16.66666667, 19.44444444, 22.22222222, 25.        ])
       
np.linspace(0, 25, 10, endpoint= False)
# array([ 0. ,  2.5,  5. ,  7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5])

이렇게 1차원 배열을 얻은 후, 우리는 이것을 가지고 여러차원으로 만들 수 있다.

reshape

np.arange(5, 30).reshape((5, 5))

# array([[ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14],
#        [15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24],
#        [25, 26, 27, 28, 29]])

랜덤값으로 채워진 배열을 만들 수 있다.

# 넘파이에서는 랜덤으로 수를 채우는, 행렬을 제공한다.
np.random.random((3, 4))
# array([[0.58686352, 0.36179287, 0.34962168, 0.07714271],
#        [0.07544062, 0.09915818, 0.71302533, 0.71173274],
#        [0.93683057, 0.33314641, 0.82256852, 0.92437724]])

np.random.randint(start, stop, size = shape)

시작값과 끝값을 줄 수 있다.

np.random.randint(1, 6, (3, 4))
# array([[3, 4, 2, 5],
#        [4, 4, 2, 2],
#        [3, 4, 3, 4]])

정규분포를 만족하는 랜덤값으로 채우기

np.random.normal(mean, standard deviation, size=shape)

np.random.normal(170, 10, (2, 3))
# array([[160.82020044, 180.88250157, 172.82545527],
#        [172.63958709, 168.92942062, 177.29288586]])

 

NUMPY BASICS

  • NumPy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리입니다.
  • 다음이 실행이 안되면 아나콘다프롬프트에서 conda install numpy 를 실행하여 설치합니다.

numpy

import numpy as np

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

b.mean()
# 3.0
b.size
# 5
b.shape
# (5,)
b.dtype
# dtype('int32')
b.max() 
# 5
b.min()
# 1
D = np.array([[1, 2], [3, 4]])
np.save('my_array', D)
Y = np.load('my_array.npy')
Y
# array([[1, 2],
#       [3, 4]])

+ Recent posts