numpyProject 타입변경 / 백터연산

2023. 6. 12. 15:29IT

반응형

numpy

 

1 #>벡터연산

    벡터연산 ( Vectorized operation )
        1. 기존 파이썬에서 지원 안된 요소간의 연산을 numpy는 지원함.
        2. 다차원배열간 산술연산, 다차원 배열과 스칼라 산술연산
        3. 비교연산도 가능 ==> 논리값(True/False) ==> boolean 색인  ( `중요` )
        ==> python and/or/not 대신에 & / | / ~ 사용한다.

        브로드캐스팅(broadcasting)
        ->서로 다른 차원을 가지고 있는 두 개의 값을 산술 하는 도중에 연산이 가능 하도록 차원을 
        자동으로 맞춰주는 작업을 의미한다.

1.기본 파이썬 연산

print("1. 파이썬의 리스트 + 리스트")

print([10,20,30]+2) # TypeError: can only concatenate list (not "int") to list

print([10,20,30]*3) # 10, 20, 30, 10, 20, 30, 10, 20, 30]

print("2. 기본 파이썬의 리스트 + 스칼라")

print([10,20,30] + 2) # TypeError: can only concatenate list (not "int") to list

print([10,20,30] * 3) # [10, 20, 30, 10, 20, 30, 10, 20, 30]

#################################################

2.백터 + 벡터 ==> 요소간 연산, 반드시 shape 일치해야 된다.

arr1D_1 = np.array([10,20,30])
arr1D_2 = np.array([5,4,3])
print("3. numpy의 벡터간 연산 처리")
print(arr1D_1 + arr1D_2)  # [15 24 33]
print(arr1D_1 - arr1D_2)  # [ 5 16 27]
print(arr1D_1 * arr1D_2)  # [50 80 90]
print(arr1D_1 / arr1D_2)  # [ 2.  5. 10.]

3.백터 + 스칼라 ==> 자동으로 브로드캐스팅 되어 연산됨.

arr1D_1 = np.array([10,20,30])
print("4. numpy의 벡터 + 스칼라 연산 처리")
print(arr1D_1 + 2)  # [12 22 32]
print(arr1D_1 - 2)  # [ 8 18 28]
print(arr1D_1 * 2)  # [20 40 60]
print(arr1D_1 / 2)  # [ 5. 10. 15.]

4.비교 연산도 벡터화 가능

print("5. 벡터의 비교 연산처리1: ", arr1D_1%3 == 0) # [False False True]
print("5. 벡터의 비교 연산처리2: ", arr1D_1 > 15) # [False True True]
print("5. 벡터의 비교 연산처리3: ", (arr1D_1 > 15) & ( arr1D_1%6 == 0)) # [False False True]

2.>>타입변경

   타입 변경
   ==> 다차원 배열의 모든 요소가 한꺼번에 변경된다. ( 벡터화 연산 )
   1. dtype 속성 이용

   2. astype 함수 이용

1. int --> float으로

data = [10,20,30]
arr1 = np.array(data)
arr2 = np.array(data , dtype=np.float64) # 가. dtype 속성
arr3 = arr1.astype(np.float64)
print("1. 원본 데이터: ", arr1.dtype , arr1)  # int32 [10 20 30]
print("2. int값을 float으로 변경 1: ", arr2.dtype , arr2)  # float64 [10. 20. 30.]
print("2. int값을 float으로 변경 2: ", arr3.dtype , arr3)  # float64 [10. 20. 30.]

2. float --> int 으로

data = [10.5, 20.7, 30.23, 100] # upcasting
arr1 = np.array(data)
arr2 = np.array(data , dtype=np.int64)
arr3 = arr1.astype(np.int64)
print("3. 원본 데이터: ", arr1.dtype , arr1)  # float64 [10.5  20.7  30.23 100.]
print("4. float 값을 int 으로 변경 1: ", arr2.dtype , arr2) # int64 [10 20 30 100]
print("4. float 값을 int 으로 변경 2: ", arr3.dtype , arr3) # int64 [10 20 30 100]
print()

3. int --> bytes , str

data = [10,20,30]
arr1 = np.array(data)
arr2 = np.array(data , dtype=np.string_)  # bytes 타입,  np.string 안됨.
arr3 = arr1.astype(np.string_)
arr4 = np.array(data , dtype=np.str_)   # str 타입 , dtype=np.str 가능
arr5 = arr1.astype(np.str_)
print("5. 원본 데이터: ", arr1.dtype , arr1)  # int32 [10 20 30]
print("6. int 값을 bytes 으로 변경 1: ", arr2.dtype , arr2) # |S2 [b'10' b'20' b'30']
print("6. int 값을 bytes 으로 변경 2: ", arr3.dtype , arr3) # |S11 [b'10' b'20' b'30']
print("7. int 값을 str 으로 변경 : ", arr4.dtype , arr4) # <U2 ['10' '20' '30']
print("7. int 값을 str 으로 변경 : ", arr5.dtype , arr5) # <U11 ['10' '20' '30']

print(dir(np))

4. str --> int

data =['10','20','30']
arr1 = np.array(data)
arr2 = arr1.astype(np.int32)
print("8. str 값을 int 으로 변경 :",arr2) # [10 20 30]

arr3 = np.array(data).astype(np.int32)
print(arr3) # [10 20 30]
반응형