Role [ 역할 ]
Task [ 과업 ]
Context [ 배경, 지식 ]
Contraints [ 제약 조건 ]
Format [ 형식 ]
빠른 데이터 접근을 위해서 같은 자료형으로만 구성 됨
메모리상에서 연속된 구조로 되어 있음
인덱스 연산자로 접근 가능
C언어로 개발 ( 직접 메모리 접근 )
dtype: 자료형 명시 (np.int64, np.float64)
| 이름 | 구성 |
|---|---|
| bit | 0, 1로만 구성 |
| Byte | 1byte == 8bit -> -256 ~ 255 |
숫자만 사용 권장
import numpy as np
nums = np.array([10, 20, 30]) # 1차원 배열 -> Vector
nums # array([10, 20, 30])
import numpy as np
nums = np.array([10, 20, 30], dtype=np.float64)
# dtype 미지정시 자동, 지정시 해당 자료형으로 할당
nums # array([10., 20., 30.])
matrix = np.array([
[10, 20, 30],
[40, 50 ,60],
[70, 80, 90]
]) # 2차원 배열 -> Matrix
print(matrix)
# [[10 20 30]
# [40 50 60]
# [70 80 90]]
# 3차원 이상의 배열 Tensor
print('0행 2열 :' , matrix[0][2], matrix[0, 2])
# 0행 2열 : 30 30 / 두 가지 방식으로 접근 가능
print(matrix[0:2, 1:3]) # 행 -> 0 ~ 1, 열 -> 1, 2
# [[20 30]
# [50 60]]
print(matrix[:, 0]) # [10 40 70]
print(matrix[1:, :2])
# [[40 50]
# [70 80]]
arange(시작, 종료, 증감 단위) : 시작 이상, 종료 미만으로 숫자 생성
arr = np.arange(1, 13)
print(arr) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
reshape(행, 열) : 1차원 배열 -> 지정된 행과 열 구조로 차원수 변경, -1: 자동 결정 옵션
mat_3x4 = arr.reshape(3, 4)
print(mat_3x4)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
print(arr.reshape(3, -1))
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
print(arr.reshape(4, -1))
# [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
flatten() : 2차원 배열 -> 1차원 배열로 평탄화
flat_arr = mat_3x4.flatten()
print(flat_arr) # [ 1 2 3 4 5 6 7 8 9 10 11 12]
축 ( Axis ) : 2차원 배열에서 연산의 방향을 설정
mat = np.arange(1, 7).reshape(2, -1)
print(mat)
sum_axis0 = mat.sum(axis=0)
sum_axis1 = mat.sum(axis=1)
print(f'axis0 행 기준 합계: {sum_axis0}') # axis0 행 기준 합계: [5 7 9]
print(f'axis1 열 기준 합계: {sum_axis1}') # axis1 열 기준 합계: [ 6 15]
mat = np.array([
[10, 20, 30],
[40, 50, 60]
])
print(mat * 5)
# [[ 50 100 150]
# [200 250 300]]
print(mat + 5)
# [[15 25 35]
# [45 55 65]]
vec = np.array([1, 2, 3])
print(mat + vec)
# 각 행에 vec 요소 값이 더해짐
# [[11 22 33]
# [41 52 63]]
객체.transpose() : {행, 열} -> {열, 행} / 전치
객체.T == 객체.transpose()
mat = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(mat)
# [[1 2 3]
# [4 5 6]]
print(mat.transpose())
# [[1 4]
# [2 5]
# [3 6]]
print(mat.T)
# [[1 4]
# [2 5]
# [3 6]]
행렬곱 연산 ( @ )
mat1 = np.array([ [10, 20], [30, 40] ])
mat2 = np.array([[1, 2], [3, 4]])
mat3 = mat1 @ mat2
print(mat3)
# [[ 70 100]
# [150 220]]
1차원 구조체
scores = pd.Series([90, 85, 88])
print(scores)
# index value
# 0 90
# 1 85
# 2 88
# dtype: int64
2차원(행, 열) 구조체
data = {
'이름' : ['김철수', '이영희', '박민수'],
'부서' : ['개발', '기획', '개발'],
'급여' : [4500, 5200, 4800]
}
df = pd.DataFrame(data)
print(df)
# 이름 부서 급여
# 0 김철수 개발 4500
# 1 이영희 기획 5200
# 2 박민수 개발 4800
df.info()
df.describe()
print(f'df.info : {df.info()}')
print(f'df.decribe : {df.describe()}' )

# column 추가하기
df['보너스'] = df['급여'] * 0.1
print(df)
# 이름 부서 급여 보너스
# 0 김철수 개발 4500 450.0
# 1 이영희 기획 5200 520.0
# 2 박민수 개발 4800 480.0
# 인덱스 특정 컬럽으로 변경하기
df_indexed = df.set_index('이름')
print(df_indexed)
# 부서 급여 보너스
# 이름
# 김철수 개발 4500 450.0
# 이영희 기획 5200 520.0
# 박민수 개발 4800 480.0
# 인덱스를 다시 숫자형 인덱스로 변경하기
df_restored = df_indexed.reset_index()
print(df_restored)
# 이름 부서 급여 보너스
# 0 김철수 개발 4500 450.0
# 1 이영희 기획 5200 520.0
# 2 박민수 개발 4800 480.0
df = pd.DataFrame({
'중간고사' : [80, 95, 70],
'기말고사' : [85, 90, 75]
}, index=['김철수', '이영희', '박민수'])
print(df)
# 중간고사 기말고사
# 김철수 80 85
# 이영희 95 90
# 박민수 70 75
score_means = df.mean(axis=0) # 행 기준 ( 인덱스 기준 )
print(score_means)
# 중간고사 81.666667
# 기말고사 83.333333
# dtype: float64
score_gap = df.sub(score_means, axis=1)
print(score_gap)
# 중간고사 기말고사
# 김철수 -1.666667 1.666667
# 이영희 13.333333 6.666667
# 박민수 -11.666667 -8.333333
def solution(my_string):
answer = ''
for i in my_string:
if i.lower() == i :
answer += i.upper()
else :
answer += i.lower()
return answer
# i를 소문자화 한 값과 i의 값이 같으면 i는 이미 소문자란 얘기, i를 대문자화 해서 answer에 추가
# i를 소문자화 한 값과 i가 같지 않으면 i는 대문자, i를 소문자화 해서 answer에 추가
for i in my_string:
if i.isupper():
answer += i.lower()
else :
answer += i.upper()
return answer
# isupper / islower 함수 사용
# i.isupper() == True면 i를 소문자화 해서 answer에 추가
# False면 i를 대문자화 해서 answer에 추가
def solution(array):
answer = []
max = array[0]
for i in array:
if i > max :
max = i
answer.append(max)
answer.append(array.index(max))
return answer
def solution(array):
return print([max(array), array.index(max(array))])
# max, min 함수 리스트나 튜플에도 사용 가능함
import math
def solution(price):
if price >= 500000:
price -= price * 0.2
elif price >= 300000:
price -= price * 0.1
elif price >= 100000:
price -= price * 0.05
# return math.floor(price) # 내림
return math.trunc(price) # 소수점 버림
# 1. 문제를 보고 10 -> 30 -> 50 순으로 if문 짜면 안됨
# 2. 소수점 이하를 버려야함, round, math.ceil()으로 안됨
def solution(array, n):
answer = 0
for i in array:
if i == n :
answer += 1
return answer
# array.count(n)을 사용하면 똑같은 효과를 얻을 수 있다.
def solution(array, n):
return array.count(n)
def solution(array):
array.sort()
return array[len(array) // 2]
# 정수 배열을 sort()를 통해 오름차순을 로 정렬한다.
# array 요소의 개수 // 2로 몫을 구하면 중앙값이 출력된다.
# // 사용안하면 array[ int(len(array) / 2)] 나눈값을 정수화 시켜서 인덱스 번호로 맞춰야함