하마가 분석하마

[python] Numpy method 본문

python

[python] Numpy method

Rrohchan 2021. 7. 7. 17:13

 

Numpy Method

 

Numpy

 

Numpy array 에는 넘파이 메소드를 사용해야만 처리를 할 수 있기에 자주 사용하는 메소드를 기억해두면 좋습니다.

 


 

넘파이 데이터 차원과 형태

 

Numpy array로 만든 데이터의 차원, 크기, 타입 살펴보기

 

import numpy as np
data = np.array([[1,2], [3,4], [5,6]])
data

print(data.shape) # (3, 2)
print(data.size) # 6
print(data.ndim) # 2
print(data.nbytes) # 24
print(data.dtype) # int32

 


 

수치형 데이터 타입

 

Numpy array 데이터의 형 변환과 설정 방법

 

print(np.array([1,2,3], dtype=np.int)) # [1 2 3]
print(np.array([1,2,3], dtype=np.float)) # [1. 2. 3.]
print(np.array([1,2,3], dtype=np.complex)) # [1.+0.j 2.+0.j 3.+0.j]

 

정수형으로 data 생성하고 추후 실수형으로 변환

## 형 변환
data = np.array([[1,2], [3,4], [5,6]], dtype = np.int)
data.astype(np.float)

 


 

넘파이 어레이를 만드는 여러 메소드

 

1. np.zeros(), np.ones(), np.full()

 

Numpy array를 만들 때, 원하는 형태로 생성하는 방법에 대해 알아보겠습니다.

# 2행 3열의 행렬 형태로 0 채워 넣기
print(np.zeros((2,3)), end='\n\n')

# 4개의 값을 1로 하여 어레이 만들기
print(np.ones(4), end='\n\n')

# 3개의 값을 3.2로 하여 어레이 채우기
print(np.full(3,3.2), end='\n\n')

 

2. np.fill()

data = np.ones(4)
data.fill(3)
print(data) # [3. 3. 3. 3.]

 

3. np.arange(), np.linspace(), np.logspace()

print(np.arange(0,12,4), end='\n\n')        # [0 4 8]

# 4개의 포인트 설정하여 3개의 구간으로 나누기
print(np.linspace(0,16,4), end = '\n\n')    # [ 0.          5.33333333 10.66666667 16.        ]

print(np.logspace(0,2,3))                   # [  1.  10. 100.]

 

4. np.meshgrid()

x = np.array([-1,0,1])
y = np.array([-2,0,2])
x,y = np.meshgrid(x,y)
print(x, end='\n\n')
print(y)

 

5. np.random.rand()

# 0과 1사이의 랜덤 수
np.random.rand(2)   # array([0.96537725, 0.98760822])

 

6. np.identity()

# 항등 행렬
np.identity(3)

 

7. np.diag()

# diagonal matrix
np.diag(np.arange(0,30,10))

 


 

인덱싱과 슬라이싱

 

Numpy array에서 ::는 간격을 의미한다.

a = np.arange(0, 11)
print(a[0])          # 0
print(a[-1])         # 10
print(a[0:5])        # [0 1 2 3 4]
print(a[0:5:2])      # [0 2 4]
print(a[:5])         # [0 1 2 3 4]
print(a[-5:])        # [ 6  7  8  9 10]
print(a[::-2])       # [10  8  6  4  2  0]

 

a = np.array([[1,2,3,4],
             [11,12,13,14],
             [21,22,23,24],
             [31,32,33,34]])
             
print(a[:,1], end='\n\n')      # [ 2 12 22 32]
print(a[1,:], end='\n\n')      # [11 12 13 14]
print(a[:2,:2], end='\n\n')
print(a[2:,:2], end='\n\n')
print(a[::2,::2], end='\n\n')
print(a[1::2,1::2], end='\n\n')

array로 선택해서 인덱싱

# 0~1 사이에 11개 만들기 (같은 간격으로)
data = np.linspace(0,1,11)

print(data, end='\n\n')                    # [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
print(data[np.array([0,2,4])], end='\n\n') # [0.  0.2 0.4]
print(data[data>0.5], end='\n\n')          # [0.6 0.7 0.8 0.9 1. ]
print(data[np.arange(2,5)], end='\n\n')    # [0.2 0.3 0.4]

 


 

Resizing and Adding dim

 

1. np.flatten()

 

# reshape
data = np.array([[1,2],
                 [3,4]])

np.reshape(data, (1,4))
data.flatten()

 

2. np.vstack() & np.hstack()

 

data = np.arange(5)
print(data, end = '\n\n')

# 행으로 쌓기
print(np.vstack((data, data, data)), end='\n\n')

# 열로 쌓기
print(np.hstack((data, data)))

 

3. np.concatenate()

 

# 넘파이 어레이끼리 합치기
a = np.arange(3)
b = np.arange(4)

np.concatenate((a,b))

 

4. np.append()

 

# 넘파이 어레이끼리 합치기2
np.append(a, [3,4,5])       # array([0, 1, 2, 3, 4, 5])

 

5. np.resize()

 

np.resize(b, (2,3))

 

6. np.sort()

 

# 정렬"
data = [[2,3,1], [9,8,7]]
np.sort(data)

 


 

Numpy 수학 연산

 

1. np.sort() & np.log2() & np.log10()

 

# 정렬
data = [[2,3,1], [9,8,7]]
np.sort(data)

 

2. Numpy 연산

 

리스트는 뺄셈이 불가능하다. 리스트에서의 곱셈의 경우 [2, 3, 2, 3]으로 리스트 자체가 두 번씩 출력된다.

 

# 숫자 하나에 관련한 연산
data = np.array([2,3])

print(data*2)     # [4 6]
print(data-1)     # [1,2]

 

3. np.add() & np.subtract() & np.multiply() & np.divide()

 

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

# 각 어레이끼리의 연산
# 모든 연산을 각자의 위치에 맞게 된다. -> 리스트도 마찬가지
print("np.add(a,b): ", np.add(a,b), end='\n\n')
print("np.subtract(a,b): ",np.subtract(b,a), end='\n\n')
print("np.multiply(a,b): ",np.multiply(a,b), end='\n\n')
print("np.divide(a,b): ",np.divide(b,a), end='\n\n')

 

4. np.mean() & np.std() & np.sum() & np.var()

 

data = np.arange(0,10)

print("np.mean(data): ", np.mean(data), end='\n\n')
print("np.std(data): ", np.std(data), end='\n\n')
print("np.sum(data): ", np.sum(data), end='\n\n')
print("np.var(data): ", np.var(data), end='\n\n')

 

5. np.prod() & np.argmin() & np.argmax() & np.all() & np.any()

 

# 모든 값의 곱
print(np.prod(data))

# 다차원 배열의 경우에 차원에 따라 가장 큰 값의 인덱스들을 반환해주는 함수
print(np.argmin(data), np.argmax(data))

# 배열의 모든 원소가 참인가
print(np.all(data))

# 배열에서 1개 이상의 원소가 참인가
print(np.any(data))

 


 

Logical Expression

 

1. np.where() & np.choose() & np.nonzero()

 

data = np.linspace(0,16,5)
print("{Data set}: ", data, end='\n\n')
print("np.where(): ", np.where(data<5), end='\n\n')
print("np.where(condition, x, y): ", np.where(data<5, data, data*2), end='\n\n')
print("np.choose(): ",np.choose(2,data), end='\n\n')
print("np.nonzero(): ",np.nonzero(data), end='\n\n')

 

np.select(condition_list, choice_list, default=0)

condition_list와 choice_list에 조건과 데이터가 두 개씩 들어있다면 각 위치에 맞게 데이터와 조건이 적용된다.

 

2. np.select() & np.logical_and() & np.logical_or() & np.logical_not()

 

data = np.linspace(0,16,5)
print("{Data set}: ", data, end='\n\n')
print("np.select(): ",np.select([data<2, data>=2],[data-1,data*2]), end='\n\n')
print("np.logical_and(): ",np.logical_and(data>1, data<10), end='\n\n')
print("np.logical_or(): ",np.logical_or(data<1, data>15), end='\n\n')
print("np.logical_not(): ",np.logical_not(data>5), end='\n\n')

 

 

 

 

 

'python' 카테고리의 다른 글

[python] 내장 그래프 2 (boxplot, barplot)  (0) 2021.07.26
[python] 내장 그래프 1 (line, scatter)  (0) 2021.07.22
[python] 문자열 포맷팅  (0) 2021.07.01
[python] 문자열 나누기, split()  (0) 2021.06.30
[python] 변수 변환  (0) 2021.06.17