파이썬 Numpy

현준·2024년 6월 27일

사관학교

목록 보기
11/23

NumPy

Numbering Python

  • 다차원 배열, 행렬 데이터 구조 제공
  • n차원 형태로 구성이 가능
import numpy as np  # numpy np로 약칭을 주어 호출

numpy 배열 만들기

# np.array(list 형식의 데이터)

arr = np.array([10,20,30])
print(arr)


# 2차원 배열
np.array(2차원 리스트)
arr2 = np.array([[10,20,30],[40,50,60]])


# 고성능 과학 계산
# 배열의 연산 vs 리스트의 연산
list1 = [1,2,3,4,5]
list2 = [10,20,30,40,50]

print(list1 + list2) 
#[1,2,3,4,5,10,20,30,40,50]


arr1 = np.array(list1)
arr2 = np.array(list2)

print(arr1 + arr2)
[11 22 33 44 55]


  • 리스트 연산은 리스트 뒤로 합쳐지지만 numpy는 실질적 값을 계산한다

배열 속성 확인

# .shapae
print(arr1. shape) #1차원
print(arr3.shape) #2처ㅏ원
print(f'행 {arr3.shape[0]}, 열 : {arr3.shape[1]}')

#
(5,)
(2, 3)2,: 3

배열의 차원수 확인

# .ndim
print(arr1.ndim)
print(arr3.ndim)

#
1
2

배열의 전체 요소 개수 확인

# .size
print(arr1.size)
print(arr3.size)

# 5
6

배열의데이터 타입

# .dtype
print(arr1.dtype)
print(arr3.dtype)

#int32

배열함수

일정 수를 생성해주는 함수

# .araange()

## // arange를 안했을때
list1 = []
for i in range(1,51):
	list1.append(i)
arr4 - np.array(list1)
arr4


## arange() 사용
#np.arange(범위)
arr5 = np.arange(1,51)
arr5

# array([ 1,  2,  3,  4,  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, 30, 31, 32, 33, 34,
       35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])

배열 재배치

# 차원수를 바꾸는 역할
# .reshape()
print(arr5.shape)
//(50,)

# 2차원데이터로 변경
arr5 = arr5.reshape(5,10)
arr5

//array([[ 1,  2,  3,  4,  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, 30],
       [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
       [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]])

인덱싱/슬라이싱

arr6 = np.array([10,20,30,40,50,])
arr6

# 인덱싱 [인덱싱 번호]
print(arr6[0])

# 슬라이싱[:] 
# 0으로 시작하면 생략,마지막 숫자는 포함 X 마지막 숫자가 데이터의 끝인 경우 생략 O
print(

# 2차원 데이터 인덱싱/ 슬라이싱
arr7 = np.arange(1,51).reshape(5,10)
arr7

//array([[ 1,  2,  3,  4,  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, 30],
       [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
       [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]])
 1~50까지 510열로 배치
 
print(arr7[0])
//[ 1  2  3  4  5  6  7  8  9 10]

print(arr7[0][4]) == print(arr7[0,4]) # 둘다 0행 4열 값을 뽑을 수 있다
//5

print(arr7[1:4))
//[[11 12 13 14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27 28 29 30]
 [31 32 33 34 35 36 37 38 39 40]]

# #, 를 기준으로 행과 열을 나누기
print(arr7[1:4,1:4])
//[[12 13 14]
 [22 23 24]
 [32 33 34]]
 

print(arr7[:3,2:])
//[[ 3  4  5  6  7  8  9 10]
 [13 14 15 16 17 18 19 20]
 [23 24 25 26 27 28 29 30]]
 
print(arr7[1:3,6:8])
//[[17 18]
 [27 28]]

1차원 데이터 여러개 인덱싱

arr8 = np.array([10,20,30,40,50,])

# 동시에 여러 숫자 접근 - 대괄호를 한번 더 감싸준다
print(arr8[[1,3]])
20, 40 # 8배열에 1번째와 3번째 데이터

# 인덱싱 + 슬라이싱 동시
print(arr7[1, 2:5])
// [13 14 15]


print(arr7[[0,3], 4:7])
// 0행과 3행 중에 4열부터 6열까지 출력
[[ 5  6  7]
 [35 36 37]]

참고사항 - step[]

[:,: :step숫자]

print(arr7[:,: :step숫자

print(arr7[:,::3])
//[[ 1  4  7 10]
 [11 14 17 20]
 [21 24 27 30]
 [31 34 37 40]
 [41 44 47 50]]
 
print(arr7[:,::4])
[[ 1  5  9]
 [11 15 19]
 [21 25 29]
 [31 35 39]
 [41 45 49]]
 
  • 데이터불러오기 - Loadtxt('경로')

데이터 추가, 수정

.append(배열, 데이터)

arr9 = np.array([1,2,3,4,5])
print(arr9)

arr9 = np.append(arr9, 20)
 
//[ 1  2  3  4  5 20]


arr9[0] = 10
print(arr9)
//[10  2  3  4  5 20]

불리언 인덱싱

  • 조건에 따라 True 결과값만 인덱싱
arr10 = np.array([97,54,75,53,69,4,8,52,41,2])

# 비교 연산자를 통한 불리언 인덱싱
arr10 > 80

//array([ True, False, False, False, False, False, False, False, False,
       False])


arr10[arr10>50]
// array([97, 54, 75, 53, 69, 52]) #True 인 값만 출력

sum 함수 np.sum()

# 랜덤 값 고정 - seed()
np.random.seed(1)
arr11 = np.random.randint(1,10, size = (2,2))
# 1부터 10까지 2행 2열 배열로 랜덤값 삽입
print(arr11)

# 안에 데이터 전부 더하기
print(arr11.sum())
print(np.sum(arr11))

평균값 np.mean()

# 평균값 - mean()
print(arr11.mean())
print(np.mean(arr11))

제곱 / 제곱근 np.square/sqrt

#  제곱 : square()

print(np.square(arr11))		// print(arr11.square())는 안됨

# 제곱근 : square root > sqrt
print(np.sqrt(arr11))

절대값 np.abs()

음수가 아닌 실수로 만듦

arr12 = np.array([-1,-2,-3,-4,-5])
print(np.abs(arr12))

유일값 np.unique()

#유일값 확인하는 함수

arr13 = np.unique([1,2,2,4,4,2,3,4])
print(np.unique(arr13))

# 유일 값 구하는 동시에 해당 값이 몇개 있는지 알려주는 매개변수
print(np.unique(arr13, return_counts = True))

조건 만족하는 위치 인덱스 찾는 함수 np.where()

print(arr13)
np.where(arr13<2)


# np.where(조건식, True인경우, False인 경우)
np.where(arr13 <2, 1,2)


# 불리언 인덱싱을 활용한 where함수
arr13[np.where(arr13>2)]

0개의 댓글