-
Python 데이터분석 기초 3 - 배열 연산, 벡터 간 내적 연산, 파일 저장, 불러오기Python 데이터 분석 2022. 10. 28. 16:16
# 배열 연산 import numpy as np x = np.array([[1,2],[3,4]], dtype = np.float64) # 데이터 타입을 지정 가능 print(x, x.dtype) y = np.arange(5, 9).reshape(2,2) y = y.astype(np.float32) print(y, y.dtype) print() print(x + y) # 행열 덧셈 print(np.add(x,y)) # 같은 방법(속도가 더 빠르다) imsi = np.random.rand(1000000) print(imsi) print(sum(imsi)) # 파이썬의 함수(속도 느림) print(np.sum(imsi)) # numpy의 함수(속도 빠름) print() print(x - y) print(np.subtract(x,y)) # 같은 방법 - print() print(x * y) print(np.multiply(x,y)) # 같은 방법 * print() print(x / y) print(np.divide(x,y)) # 같은 방법 / print() # 벡터 간 내적 연산 : dot함수 사용(python), R에서는 %*% 사용했다. v = np.array([9, 10]) w = np.array([11,12]) print(v *w) print(v.dot(w)) # v[0] * w[0] + v[1] * w[1] print(np.dot(v,w)) # np 사용 print() print(x) # 2차원 print(v) # 1차원 print(np.dot(x,v)) # x[0, 0] * v[0] + x[0, 1] * v[1] = 29, x[1, 0] * v[0] + x[1, 1] * v[1] = 67 print() print(x) # 2차원 print(y) # 2차원 print(np.dot(x,y)) # x[0, 0] * y[0, 0] + x[0, 1] * y[1, 0] = 19, ... print('------------') print(np.sum(x)) print(np.mean(x)) print(np.cumsum(x)) # 누적합 print(np.cumprod(x)) # 누적곱 # ... print() name1 = np.array(['tom','james','tom','oscar']) name2 = np.array(['tom','page','john']) print(np.unique(name1)) # 중복 배제 print(np.intersect1d(name1, name2)) # 교집합\ print(np.intersect1d(name1, name2, assume_unique=True)) # 교집합, 중복 허용 print(np.union1d(name1, name2)) # 합집합 print('\nTranspose : 전치') print(x) print(x.T) print(x.transpose()) print(x.swapaxes(0, 1)) print('\nBroadcast 연산 : 크기가 다른 배열 간의 연산을 하면 작은 배열이 큰 배열의 크기를 자동으로 따라간다.') x = np.arange(1, 10).reshape(3, 3) print(x) y = np.array([1,0,1]) print(x + y) print() print(x) np.savetxt('my.txt', x) # 파일로 저장 가능하다. imsi = np.loadtxt('my.txt') # 저장된 파일을 불러온다. print(imsi) print() imsi2 = np.loadtxt('my2.txt', delimiter = ',') # 저장된 파일을 불러온다. ,로 분리해준다. print(imsi2) <console> [[1. 2.] [3. 4.]] float64 [[5. 6.] [7. 8.]] float32 [[ 6. 8.] [10. 12.]] [[ 6. 8.] [10. 12.]] [0.75608015 0.05434852 0.50819626 ... 0.81784943 0.93267389 0.87782032] 499725.1706093457 499725.1706093464 [[-4. -4.] [-4. -4.]] [[-4. -4.] [-4. -4.]] [[ 5. 12.] [21. 32.]] [[ 5. 12.] [21. 32.]] [[0.2 0.33333333] [0.42857143 0.5 ]] [[0.2 0.33333333] [0.42857143 0.5 ]] [ 99 120] 219 219 [[1. 2.] [3. 4.]] [ 9 10] [29. 67.] [[1. 2.] [3. 4.]] [[5. 6.] [7. 8.]] [[19. 22.] [43. 50.]] ------------ 10.0 2.5 [ 1. 3. 6. 10.] [ 1. 2. 6. 24.] ['james' 'oscar' 'tom'] ['tom'] ['tom' 'tom'] ['james' 'john' 'oscar' 'page' 'tom'] Transpose : 전치 [[1. 2.] [3. 4.]] [[1. 3.] [2. 4.]] [[1. 3.] [2. 4.]] [[1. 3.] [2. 4.]] Broadcast 연산 : 크기가 다른 배열 간의 연산을 하면 작은 배열이 큰 배열의 크기를 자동으로 따라간다. [[1 2 3] [4 5 6] [7 8 9]] [[ 2 2 4] [ 5 5 7] [ 8 8 10]] [[1 2 3] [4 5 6] [7 8 9]] [[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]] [[1. 2. 3.] [4. 5. 6.]]
Numpy는 브로드캐스팅을 자동으로 적용시켜준다.
브로드캐스팅(Broadcasting)은 모양이 다른 배열들 간의 연산이 어떤 조건을 만족했을 때 가능해지도록 배열을 자동적으로 변환하는 것이라고 정의할 수 있다. 그리고 누락되었거나 길이가 1인 차원에 대해 브로드캐스팅이 수행된다.위의 세 그림은 배열 연산에서 항상 1차원 배열이 포함되어 있다. 그리고 행/열의 어떤 축이든(;0번/1번 어떤 축이든) 차원의 길이가 같은 것을 알 수 있다. 3x3 + 1x3, 3x1 + 1x3브로드캐스팅이 일어날 수 있는 조건은 다음과 같다.- 차원의 크기가 1일때 가능하다
두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다. - 차원의 짝이 맞을 때 가능하다
차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다.
출처: https://sacko.tistory.com/16 [데이터 분석하는 문과생, 싸코:티스토리]
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 6 - Pandas(Series) 2차원, 배열 (0) 2022.10.31 Python 데이터분석 기초 5 - 배열에서 조건 연산 where(조건, 참, 거짓) 3항 연산자, 배열 결합, 복원/비복원 (0) 2022.10.28 Python 데이터분석 기초 4 - 배열에 행/열 추가, append, insert, delete (0) 2022.10.28 Python 데이터분석 기초 2 - Numpy(배열), list vs Numpy (0) 2022.10.28 Python 데이터분석 기초 1 - Numpy(합, 평균, 분산, 표준편차) (0) 2022.10.28 - 차원의 크기가 1일때 가능하다