Blair  - Soul Eater [파이썬 개념] Numpy - 개념 총정리 (생성,추출,연산,통계,메소드,조건식,정렬 등)

• programming language/python

[파이썬 개념] Numpy - 개념 총정리 (생성,추출,연산,통계,메소드,조건식,정렬 등)

oujin 2022. 7. 26. 12:11
728x90

Numpy는 기본적으로 배열의 구조로 되어있다. 또한 다차원 배열, 배열 간 연산, 배열의 정렬 등의 기능도 제공한다.

Numpy에서의 핵심은 다차원을 지원하는 배열 객체 ndarray 이다.

● ndarray 객체는 리스트와 같은 배열 형태로 되어 있지만, 리스트보다 훨씬 더 편리한 기능을 제공한다.

배열 객체 ndarray를 생성하는 가장 간단한 방법은 Numpy의 array() 메소드를 이용한는 것이다.

ndarray 객체의 모든 요소는 int32(32비트 정수형), float64(64비트 실수형) 등과 같이 동일한 데이터 형을 가진다.

  이렇게 함으로써 배열 연산 시 처리 속도가 빨라진다

 

▶ 1. 배열 생성하는 방법

 

import numpy as np

data = np.array([1, 2, 3, 4, 5])
print(data)
print(type(data))
print(data.dtype)

 

[1 2 3 4 5]
<class 'numpy.ndarray'>
int32

 

 

▶ 2. Numpy의 random.randn() 메소드를 이용하여 2차원(2행 3열)의 실수형 랜덤 수를 생성

 

import numpy as np

data = np.random.randn(2,3) 

#2행 3열의 실수형 랜덤 수 발생


print(data)


print(data.shape

#2행 3열


print(data.dtype

#실수형의 데이터형

 

[[ 1.20488336  2.19555102  0.81133548]
 [ 0.11816927  2.15649683 -1.33816876]]
(2, 3)
float64

 

 

▶ 3. np.zeros() 0으로 객체 초기화 하기

 

import numpy as np 

#넘파이 모듈 불러오기

data1 = np.zeros(10) 

#0으로 객체 초기화 하기, 0이 10개 입력됨


print(data1) 

#[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]


print(data1.dtype

#float64

data2 = np.zeros((2,3)) 

# 2행 3열의 0.0으로 초기화된 64비트 실수형 ndarray 객체를 생성


print(data2)
print(data2.dtype)

data3 = np.zeros((2, 3),dtype=np.int32) 

#0으로 초기화된 32비트 정수형의 ndarray 객체를 생성


print(data3)
print(data3.dtype)

 

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
float64
[[0. 0. 0.]
 [0. 0. 0.]]
float64
[[0 0 0]
 [0 0 0]]
int32

 

 

▶ 4. np.ones() 1로 객체 초기화 하기

 

import numpy as np

data1 = np.ones(8) 

#ndarray 객체를 1로 초기화하여 8개 요소가 모두 1인 ndarray 객체를 생성


print(data1)

data2 = np.ones((3,4) ,dtype=np.int32) 

#3행 4열의 2차원 ndarray 객체의 모든 요소가 1이고

#객체 요소의 데이터 형을 32비트 정수형


print(data2)

 

[1. 1. 1. 1. 1. 1. 1. 1.]
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

 

 

▶ 5. arange() 메소드

 

import numpy as np

data = np.arange(10,121,10)

#파이썬의 내장함수인 range()와 사용법 동일

#10에서 121-1까지 (10씩증가)


print(data)


print(data[2])

#data의 인덱스 2인 요소의 값 30


print(data[5:8])
#data의 인덱스 5~`7까지의 요소의 값 [60 70 80]


data[7:10] = 800

#data의 인덱스 7~`9에800`의 값을 저장


print(data)

data2 = data.reshape(2, 6)

#ndarray의 객체 data를 2행 6열로 재구성
print(data2)

 

[ 10  20  30  40  50  60  70  80  90 100 110 120]
30
[60 70 80]
[ 10  20  30  40  50  60  70 800 800 800 110 120]
[[ 10  20  30  40  50  60]
 [ 70 800 800 800 110 120]]

 

 

▶ 6. 2차원 배열의 요소 추출

 

import numpy as np

data = np.array([[1, 2, 3, 4, 5],
                 [6, 7, 8, 9, 10],
                 [11, 12, 13, 14, 15]])

print(data)


print(data[2][3])

# data에서 인덱스가 2인 행과 인덱스가 3인 열에 해당되는 요소의 값 14


print(data[0][1:])

#data에서 인덱스 0인 행에서/ 인덱스 1인 열부터 나머지 열까지의 데이터의 값  [2 3 4 5]


print(data[0])

#data에서 인덱스 0인 행의 데이터의 값 [1 2 3 4 5]


print(data[[1, 2]])

data에서 인덱스 1과 2인 행의 데이터 값


print()

data[1] = 100

#data[1]은 인덱스 1의 행 데이터를 의미하는데 이곳에 100으로 변경


print(data)

data[:] = 200

#data[:]는 data의 모든요소이므로 모든 요소의 데이터를 200으로 변경


print(data)

 

[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
14
[2 3 4 5]
[1 2 3 4 5]
[[ 6  7  8  9 10]
 [11 12 13 14 15]]

[[  1   2   3   4   5]
 [100 100 100 100 100]
 [ 11  12  13  14  15]]
[[200 200 200 200 200]
 [200 200 200 200 200]
 [200 200 200 200 200]]

 

 

▶ 7. 배열의 산술 연산

리스트와 비교했을 때 ndarray의 장점 중 하나는 배열에 대해 산술 연산(+, -, *, /, % 등)이 바로 가능한 점 입니다.

 

import numpy as np

a = np.array([[10, 7, -8, 2],
             [-2, 2, 8, 3], 
             [6, -8, -5, 3]])

b = a*2

#배열a의 모든 요소에 2가 곱해진 값이 b에 저장


print(b)

c = a**2

#배열a의 모든 요소의 제곱값이 ndarray 객체 c에 저장


print(c)

print(a>b)

#배열에 대한 비교 연산은 참(True), 거짓(False)의 불 (Bool) 값을 반환

 

[[ 20  14 -16   4]
 [ -4   4  16   6]
 [ 12 -16 -10   6]]
[[100  49  64   4]
 [  4   4  64   9]
 [ 36  64  25   9]]
[[False False  True False]
 [ True False False False]
 [False  True  True False]]

 

 

▶ 8. 배열의 통계 메소드

 Numpy를 이용하여 배열의 합계, 평균, 최댓값, 최솟값 구하기

 

import numpy as np

data = np.array([[80, 78, 90, 93],
                 [65, 87, 88, 75], 
                 [98, 100, 68, 80]])

print(data.sum())

#배열의 모든 요소의 합계를 반환


print(data.mean())

#배열의 모든 요소의 평균 값을 반환


print(data.max())

#배열의 모든 요소의 값 중에서 최댓값을 반환


print(data.min())

#배열의 모든 요소의 값 중에서 최솟값을 반환


print('')

print(data.max(axis=0))

#각 의 요소 값 중 최댓값을 구해서 얻은 배열을 반환


print(data.max(axis=1))

#각 의 요소 값 중 최댓값을 구해서 얻은 배열을 반환


print('')

index1 = np.argmax(data, axis=0)

#Numpy의 argmax() 메소드는 열 또는 행 방향으로 최댓값을 갖는 요소의 인덱스를 반환

#즉, data에서 각 열에 대해 요소가 최댓값을 가지는 인덱스 [2 2 0 0]을 반환

 

index2 = np.argmin(data, axis=1)

#Numpy의 argmin() 메소드는 열 또는 행 방향으로 최댓값을 갖는 요소의 인덱스를 반환

#즉, 배열 객체 data에서 각 행에 대해 요소가 최솟값을 가지는 인덱스 [1 0 2]를 반환

 

print(index1, index2)

 

1002
83.5
100
65

[ 98 100  90  93]
[ 93  88 100]

[2 2 0 0] [1 0 2]

 

▶ 9. 배열에 조건식 사용하기

 

import numpy as np

data = np.array([
    [0.823293, 0.292996, -2.59991429, 0.9087267],
    [-0.28825592, 0.3996413, 0.49922846, -0.32000343],
    [1.12672336, -0.51248337, 0.99202783, 0.77582767]
])

# data = np.random.randn(3,4)  의 값을 실습을 위해 정적인 값으로 바꾸었습니다.


print(data)


print(data>0)
#배열의 요소의 값이 양수인 경우 에는 True, 0 또는 음수일 경우에는 False의 요소 값을 가지는 배열을 생성


total = (data <0).sum() 

#음수값요소의 개수의 합


print(total)

data2 = np.where(data>0,1,-1)

#data에서 요소값이 양수인 경우에는 1 출력, 그렇지 않은 경우에는 -1출력의 요소값을 가지는 배열


print(data2)

data3 = np.where(data > 0, 5,data)

#data에서 요소값이 양수인 경우에는 5출력, 그렇지 않을 경우에는 해당 요소의 값을 출력의 요소값을 가지는 배열


print(data3)

 

[[ 0.823293    0.292996   -2.59991429  0.9087267 ]
 [-0.28825592  0.3996413   0.49922846 -0.32000343]
 [ 1.12672336 -0.51248337  0.99202783  0.77582767]]
[[ True  True False  True]
 [False  True  True False]
 [ True False  True  True]]
4
[[ 1  1 -1  1]
 [-1  1  1 -1]
 [ 1 -1  1  1]]
[[ 5.          5.         -2.59991429  5.        ]
 [-0.28825592  5.          5.         -0.32000343]
 [ 5.         -0.51248337  5.          5.        ]]

 

 

▶ 10. 배열의 요소 정렬

 

import numpy as np

data = np.array([[13, 22, 17, 2],
             [-2, 20, 8, 3], 
             [-16, 10, -5, 33]])

data.sort(0)

#각 열을 중심으로 해당 의 요소들을 오름차순으로 정렬


print(data)
print()

data.sort(1)

# 각 행을 중심으로 해당 의 요소들을 오름차순으로 정렬


print(data)

 

[[-16  10  -5   2]
 [ -2  20   8   3]
 [ 13  22  17  33]]

[[-16  -5   2  10]
 [ -2   3   8  20]
 [ 13  17  22  33]]

 

 

▶ 10. 배열의 요소 정렬

● 열과 행을 삽입하기

 

import numpy as np

a = np.arange(10)

#0-9까지의 정수 생성


print(a)
print()

b = np.insert(a,3,10)

# Numpy의 insert() 메소드는 ndarray 배열의 열 또는 행에 데이터를 삽입하는 데 사용

#배열 a의 인덱스 3의 요소에 10의 값을 삽입


print(b)
print()

x = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
print(x)
print()

y = np.insert(x, 1, 10, axis=0)

#배열 x의 열방향으로 인덱스 1의 요소에 모든 요소 값이 10인 행을 하나 삽입


print(y)
print()

y = np.insert(x, 1, 10, axis=1)

#배열 x의 행방향으로 인덱스 1의 요소에 모든 요소 값이 10인 행을 하나 삽입


print(y)

 

[0 1 2 3 4 5 6 7 8 9]

[ 0  1  2 10  3  4  5  6  7  8  9]

[[1 1 1]
 [2 2 2]
 [3 3 3]]

[[ 1  1  1]
 [10 10 10]
 [ 2  2  2]
 [ 3  3  3]]

[[ 1 10  1  1]
 [ 2 10  2  2]
 [ 3 10  3  3]]

 

 

 

 

 

 

 

 

출처: 예제 중심 파이썬 입문

궁금한 부분이 있으면 댓글 부탁드립니다^^

728x90