Python/Python Language

다차원 배열의 구조와 연산

567Rabbit 2024. 4. 2. 13:18

anaconda prompt에서 주피터 노트북 실행하기

>> jupyter notebook .

 

Save and Load data

np.save('지정하고자 하는 파일명', X)

np.load(' 지정한 파일명.npy ')

 

리스트 생성하기

score_list = [100, 90, 75, 66, 98]

 

리스트 추가하기

score_list.append(58)

score_list.append(87)

 

리스트 변경하기 

score_list[0] = 99

 

리스트 삭제하기

del score_list[5]

 

결과

[99, 90, 75, 66, 98, 87]

 

평균구하기

sum(score_list) / len(score_list)         

결과 : 85.6

 

평균 구하는 함수로 평균구하기

score_list.mean()

 

표준편차 구하기

score_list.std()

 

딕셔너리(dictionary) 생성하기

score_dict = { '철수' : 100, '영희' : 90, '길동' : 75}

 

my_phone = { 'color' : 'red' , 'model' : 'iphone12', 'year' : 2021 } # (key : value) = item

--------------------------------------------------------------------

 

np.zeros((3,4))

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

 

np.ones((4,5))

array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

 

 

np.full( (3, 4) , 10 )

array([[10, 10, 10, 10],
       [10, 10, 10, 10],
       [10, 10, 10, 10]])

-----------------------------------------------------------------

배열만들기

 

0부터 9까지 정수

np.arange(10)

 

1부터 20까지의 정수 홀수만

np.arange(1,20+1,2)

 

실수

np.linspace(시작숫자, 끝숫자, 개수)

 

 

구조 만들기

x = array(2,10+1)

array([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

x.reshape(3,3)  #행,열

array([[ 2,  3,  4],
       [ 5,  6,  7],
       [ 8,  9, 10]])

 

 

한번에 배열, 구조 만들기

np.arange(5, 5+25).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]])

 

 

-----------------------------------------------------------------------

import random

 

random.random()  #0과 1사이의 숫자를 랜덤으로 값을 매긴다

 

random.randint(a, b) #a과 b사이의 숫자를 랜덤으로 값을 매긴다

 

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

np.random.randint(1, 6, (2,3))

array([[3, 1, 1],
       [4, 1, 1]])

 

-------------------------------------------------------------------------

array([[32, 98, 41, 79, 17],
       [65, 27,  6, 13, 73],
       [99, 75, 12, 18, 85],
       [60, 13, 11, 28,  3]])

 

X.max(axis = 1)

array([98, 73, 99, 60])

 

X.max(axis = 0)

array([99, 98, 41, 79, 85])

 

X.sum(axis = 0)

array([256, 213,  70, 138, 178])

 

 

X.argmax() #최대값이 있는 위치를 찾으세요

 

각 행별로 최대값이 있는 위치를 찾으세요

X.argmax(axis = 1)

 

각 열별로 최대값이 있는 위치를 찾으세요

X.argmax(axis = 0)

 

------------------------------------------------------------------------

 

다차원배열의 인덱스

array([[65, 78, 20,  3, 97],
       [37, 94, 28, 97, 85],
       [78,  8, 92, 12, 17],
       [96, 82, 90, 27, 55]])

1) X[1][2]

결과 28

 

2) X[1,2]   "1)보다 2)를 실무에서 더 많이 씀"

결과 28

 

 

Slicing - 잘라서 가져오기

fullname = '홍길동'

fullname[1:3]

결과 '길동'

 

slicing시 주의할 점

 

X = np.random.randint(1,100, (3,4))

array([[ 37,  46,   5,  49],
       [100,  47,  54,  71],
       [ 85,  53,  69,  73]])

 

Y = X[:,1:]

Y[2,2] = 100

 

Y

array([[ 46,   5,  49],
       [ 47,  54,  71],
       [ 53,  69, 100]])

 

X

array([[ 37,  46,   5,  49],
       [100,  47,  54,  71],
       [ 85,  53,  69, 100]])

 

=> Y값을 바꿨더니 X값도 함께 바뀌어버리는 문제가 생긴다

 

 

이러한 문제를 해결하기 위해서 copy함수를 써서 X 원본을 둔 채로 Y의 복사본의 데이터만 변경하려고 한다

Y = X[:,1:].copy()   로 하여서,

 

Y

array([[ 46,   5,  49],
       [ 47,  54,  71],
       [ 53,  69, 100]])

 

Y[2,2] = 0

array([[46,  5, 49],
       [47, 54, 71],
       [53, 69,  0]])

 

X

array([[ 37,  46,   5,  49],
       [100,  47,  54,  71],
       [ 85,  53,  69, 100]])

 

.copy()를 이용하였더니Y는 0으로 바뀌었지만 X는 그대로 100인 것으로 보아 원본을 유지하기 위해 .copy()를 사용할 수 있다는 점을 알 수 있다

 

access(액세스:가져오기)

and 연산자 &

X[(X > 50) & (X < 80)]

 

or 연산자 |

X[(X < 50) | (X > 80)]

 

 

중복 제거하기

np.unique(x)

 

 

공백 없애기

data.strip()

 

 

포맷함수

name1 = str("김민수") 
age1 = 10
name2 = str("이철희")
age2 = 13

 

'이름: {} 나이: {}'.format(name1,age1)

'이름: {} 나이: {}'.format(name2,age2)

 

f'이름: {name1} 나이: {age1}'

f'이름: {name2} 나이: {age2}'

#큰 따옴표도 물론 가능하다

 

결과

이름:  김민수  나이:  10
이름:  이철희  나이:  13

 

 

join 함수

 

interest = ['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']

 

interest

['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']

 

 

' '.join(interest)

'삼성전자 LG전자 Naver SK하이닉스 미래에셋대우'

 

 

'/'.join(interest)

'삼성전자/LG전자/Naver/SK하이닉스/미래에셋대우'

 

 

print('\n'.join(interest))

삼성전자
LG전자
Naver
SK하이닉스
미래에셋대우

 

 

 

 

정렬하기

 

data20 = [2, 4, 3, 1, 5, 10, 9]

 

data20.sort()

 

data20 #출력

[1, 2, 3, 4, 5, 9, 10]

 

center() : 기본 20자의 공간에서 가운데 정렬시켜준다

 

sort()  영숫자순 오름차순
sort(reverse = True) 내림차순

 

기본적으로 sort() 방법은 대소문자를 구분하므로 대문자가 소문자보다 먼저 정렬된다

 

 

따라서 대소문자를 구분하지 않는 정렬기능을 원한다면 
sort(key = str.lower)