라벨이 numpy인 게시물 표시

[python] numpy에서 bytes로 변경하는 방법

이미지
numpy to bytes  tobytes method는 numpy 배열을 bytes로 변경하여 리턴합니다. All Code import numpy as np arr = np.array([[ 0 , 1 ] , [ 2 , 3 ]] , dtype =np.uint8) print ( f'arr: { arr } ' ) b_arr = arr.tobytes() print ( f'tobytes: { len (b_arr) } , type: { type (b_arr) }  , bytes:  { b_arr } ' ) # 출력 # arr: [[0 1] #         [2 3]] # tobytes: 4, type: <class 'bytes'>, bytes: b'\x00\x01\x02\x03' tobytes Option order: 'C', 'F' / default 'C' 둘은 multidimensional arrays일 경우 메모리 할당 방법의 차이가 있습니다. 'C': Row-major order 'F': Column-major order tobytes option code arr = np.array([[ 0 ,  1 ] ,  [ 2 ,  3 ]] ,  dtype =np.uint8) b_c_arr = arr.tobytes( 'C' ) print ( f'C, tobytes: { len (b_c_arr) } , type: { type (b_c_arr) } , bytes: { b_c_arr } ' ) b_f_arr = arr.tobytes( 'F' ) print ( f'F, tobytes: { len (b_f_arr) } , type: { type (b_f_arr) } bytes: { b_f_arr } 

[python] numpy sum으로 axis 연산 정리(2): 3차원

이미지
python numpy 연산에 사용되는 axis 구조를 알아보는 글이며, 틀린 내용은 댓글 부탁드립니다. 이전 글을 보지 않으신 분은 아래의 글을 먼저 보고 와주세요. python numpy sum으로 axis 연산 정리(1) numpy sum을 통해 3차원 배열에서 axis 연산이 어떻게 사용되는지 알아보겠습니다. 3차원에서 sum 1. axis None axis를 'None'으로 설정하면 모든 요소의 값을 '합산'한 값을 출력합니다. arr = np.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 ]]]) arr_sum = np.sum(arr ,  axis = None ) print ( 'sum axis None: ' ,  arr_sum) # 출력 # sum axis None:  300 2. axis 0 axis '0'으로 설정하면 'depth'을 기준으로 요소의 합을 도출합니다. ※ axis 0이 왜 'depth'인지 모르시는 분은 numpy axis 기본구조 글을 먼저 읽고 와주세요. 현재 3차원 배열의 구조는 아래의 그림처럼 표현할 수 있기 때문에 sum은 axis 0의 값을 '합산'하여 axis 0이 제거된 '2차원 배열 값'을 새롭게 반환합니다. (3, 2, 4) shape 데이터 sum 결과는 axis 0(depth)이 제거된 (2, 4) shape의 2차원 배열이 반환되는 걸 확인할 수

[python] numpy에서 사용하는 axis 기본 구조

이미지
python numpy가 사용하는 axis 구조를 알아보는 글입니다. 혹여 틀린 내용은 댓글 부탁드립니다. axis 란 python에서 axis란 차원을 의미합니다. 따라서 1차원 배열에서 axis는 0이 존재하며, 2차원 배열에서 axis는 0(행), 1(열)이 존재합니다. numpy 함수에서는 axis를 기준으로 값들을 처리하는데, axis가 생각보다 헷갈리기 때문에 axis의 개념을 알아보겠습니다. numpy 배열의 차원을 알아보는 방법으로는 shape 함수를 사용합니다. shape을 통해 데이터가 몇 차원으로 몇 개의 데이터가 구성되어 있는지 확인할 수 있습니다. 1. numpy에서 사용하는 axis 구조 (1차원) arr = np.array([ 1 , 2 , 3 , 4 ]) print ( 'arr.shape: ' , arr.shape) # 출력 # arr.shape:  (4,) np shape 함수를 통해 1차원 배열을 확인할 수 있습니다. (4, )는 1차원의 데이터로 총 4개의 데이터를 가지고 있음을 나타냅니다. axis는 차원의 수 만큼 존재합니다. (0부터 시작) 1차원 -> axis 0 2차원 -> axis 1, 2 1차원 배열 shape axis 순서 1차원 배열을 그림으로 그릴 때 axis를 구상하는 방식에 따라 '표현'의 차이가 있을 수 있습니다. Ex. 위의 1, 2번은 동일한 배열에 대해 axis를 어디로 표현했느냐에 차이일 뿐 모두  '같은 내용을 그림 상 다르게 표현' 한 겁니다. 여기에서는 1번 그림으로 axis를 설명할 예정이니, 다른 블로그의 그림과 다르다고 헷갈리지 않기를 바랍니다. axis 0 방향으로 배열에 접근한 뒤 가져온 배열 값을 출력합니다. print ( 'arr[0]: ' ,  arr[ 0 ]) print ( '

[python] numpy sum으로 axis 연산 정리(1): 1,2차원

이미지
python numpy 연산에 사용되는 axis 구조를 알아보는 글이며, 틀린 내용은 댓글 부탁드립니다. python axis 개념이 안잡히신 분은 아래의 글을 먼저 보고 와주세요. numpy axis 기본 구조 sum을 통해 numpy에서 axis를 연산이 어떻게 사용되는지 알아보겠습니다. sum함수를 간단하게 살펴보자면 parameter 'a'에 numpy array를 넣어 요소의 합을 내는 함수입니다. 이 때 axis를 어떻게 두냐에 따라 sum을 하는 방법이 달라집니다. axis None: 몇 차원 배열이든 간 모든 요소의 합을 도출합니다. axis 0: 0을 기준으로 요소의 합을 도출합니다. axis 1: 1을 기준으로 요소의 합을 도출합니다. axis 2: 2을 기준으로 요소의 합을 도출합니다. 1. 1차원에서 sum 1차원 배열에서 axis를 0으로 설정하면 '행'을 기준으로 요소의 합을 도출합니다. 그림으로 보면 아래와 같습니다. axis 0 방향 배열에 접근한 뒤 합산하면 1 + 2+ 3 + 4의 총합인 10이 도출됩니다. import numpy as np  arr = np.array([ 1 , 2 , 3 , 4 ])  arr_sum0 = np.sum(arr , axis = 0 )  print ( 'arr: ' , arr)  print ( 'arr_sum0: ' , arr_sum0) # 출력 # arr:  [1 2 3 4] # arr_sum0:  10 2. 2차원에서 sum 2-1. axis None axis를 'None'으로 설정하면 모든 요소의 값을 '합산'한 값을 출력합니다. arr = np.array([[ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 , 8 ]]) arr_sum = np.sum(ar

[opencv-python] np vstack, hstack을 이용한 이미지 이어 붙이기

이미지
이미지 이어 붙이기 1. vstack vstack은 vertical stack으로 수평을 기준으로 배열을 쌓는다고 생각하면 됩니다. 즉, 열의 수가 같은 두 개 이상의 배열을 위에서 아래로 연결합니다. vstack을 수행하기 위해서는 prameter인 tup에 쌓고자 하는 두 개 이상의 배열을 넣으면 되는데, 반드시 두 번째 shape이 동일 해야 합니다. 두 번째 shape이 동일해야 하는 이유는  배열을 수평으로 쌓으려면 열이 같아야 하기 때문입니다 . import numpy as np arr1 = np.array([[ 1 , 1 , 1 ]]) arr2 = np.array([[ 3 , 3 , 3 ]]) arr3 = np.array([[ 6 , 6 , 6 ] , [ 6 , 6 , 6 ]]) print ( "{0}, arr1.shape = {1}" .format(arr1 , arr1.shape)) print ( "{0}, arr2.shape = {1}" .format(arr2 , arr2.shape)) print ( "{0}, arr3.shape = {1}" .format(arr3 , arr3.shape)) vstack_arr1 = np.vstack((arr1 , arr2)) print ( "{0}, vstack_arr1.shape = {1}" .format(vstack_arr1 , vstack_arr1.shape)) vstack_arr2 = np.vstack((arr1 , arr2 , arr3)) print ( "{0}, vstack_arr2.shape = {1}" .format(vstack_arr2 , vstack_arr2.shape)) # 출력 # [[1 1 1]], arr1.shape = (1, 3) # [[3 3 3]], arr2.shape = (1, 3) #

[python] numpy.copyto 사용법

이미지
numpy.copyto Return: Return copy of an array copyto 관련링크 https://docs.scipy.org/doc/numpy/reference/generated/numpy.copyto.html numpy.copyto 기본 사용법 기본적으로 src의 정보를 dst에 복사하는게 copyto 입니다. import numpy as np src = np.arange( 3 ).astype(np.uint8) print ( "src dtype = {0}, \n src = \n {1} \n " .format(src.dtype , src)) dst = np.ones( 3 ).astype(np.uint32) print ( "before copyto dst dtype = {0}, \n dst = {1} \n " .format(dst.dtype , dst))  np.copyto(dst , src) print ( "after copyto dst dtype = {0}, \n dst = {1} \n " .format(dst.dtype , dst)) # 출력 # src dtype = uint8, # src = [0 1 2] # before copyto dst dtype = uint32 , # dst = [1 1 1] # after copyto dst dtype = uint32 , # dst = [0 1 2] 0, 1, 2의 값을 가지는 src를 dst로 복사하는 코드입니다. src에서 dst로 배열의 값만 복사 가 되었으며 dst dtype은 그래로 유지됩니다. 즉. copyto를 사용하면 src에 존재하는 값의 요소만 dst로 복사 합니다. src dtype까지 dst로 변경되지 않습니다. 밑에는 copyto casting 및 where에 대한 설명입니다. numpy.copyto c