• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[12] Python(Numpy)

21 Jun 2020

Reading time ~4 minutes

Table of Contents
  • 목차
  • Numpy의 형태를 나누기
  • 형태에 따른 상수 연산
    • 기본적인 연산
    • 서로 다른 형태
  • 타일과 반복
    • 반복
  • 마스킹 연산(array의 브로드 캐스트)
    • 2차원
    • 다차원
  • 다양한 집계 함수
    • 행 or 열단위 더하기
  • 저장, 불러오기
    • 단일 객체
    • 여러 개의 객체
  • 특정한 기준에 따라서 정렬
    • Numpy 원소 오름차순 정렬
    • Numpy 원소 내림차순 정렬
    • 각 열을 기준으로 정렬
  • 자주 사용되는 함수
    • 균일한 간격으로 데이터 생성
    • 난수의 재연(실행마다 결과 동일)
    • Numpy 배열 객체 복사
    • 중복된 원소 제거

목차

  • Numpy의 형태를 나누기
  • 형태에 따른 상수 연산
    • 기본적인 연산
    • 서로 다른 형태
  • 타일과 반복
    • 반복
  • 마스킹 연산(array의 브로드 캐스트)
    • 2차원
    • 다차원
  • 다양한 집계 함수
    • 행 or 열단위 더하기
  • 저장, 불러오기
    • 단일 객체
    • 여러 개의 객체
  • 특정한 기준에 따라서 정렬
    • Numpy 원소 오름차순 정렬
    • Numpy 원소 내림차순 정렬
    • 각 열을 기준으로 정렬
  • 자주 사용되는 함수
    • 균일한 간격으로 데이터 생성
    • 난수의 재연(실행마다 결과 동일)
    • Numpy 배열 객체 복사
    • 중복된 원소 제거

Numpy의 형태를 나누기

import numpy as np

array = np.arange(8).reshape(2, 4)
left, right = np.split(array, [2], axis=1)

print(left.shape)
print(right.shape)
print(right[1][1])
(2, 2)
(2, 2)
7

-> [2] 는 2열부터 right로 나눔

형태에 따른 상수 연산

기본적인 연산

import numpy as np

array = np.random.randint(1, 10, size=4).reshape(2, 2)
result_array = array * 10
print(result_array)
[[10 30] 
[40 80]]

서로 다른 형태

import numpy as np

array1 = np.arange(4).reshape(2, 2)
array2 = np.arange(2)
array3 = array1 + array2

print(array3)
 
[[0 2]
 [2 4]]

2

import numpy as np

array1 = np.arange(0, 8).reshape(2, 4)
array2 = np.arange(0, 8).reshape(2, 4)
array3 = np.concatenate([array1, array2], axis=0)
array4 = np.arange(0, 4).reshape(4, 1)

print(array3 + array4)
 
[[ 0  1  2  3]
 [ 5  6  7  8]
 [ 2  3  4  5]
 [ 7  8  9 10]]

2

타일과 반복

반복

In [51]: arr = np.arange(3) 

In [52]: arr.repeat(3) 
Out[52]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])

In [53]: arr.repeat([2, 3, 4]) ->반복하고 싶은 횟수 순
Out[53]: array([0, 0, 1, 1, 1, 2, 2, 2, 2])

In [54]: arr = randn(2, 2)
In [56]: arr.repeat(2, axis=0)
Out[56]:
array([[ 0.7157, -0.6387],
[ 0.7157, -0.6387],
[ 0.3626, 0.849 ], 
[ 0.3626, 0.849 ]])

마스킹 연산(array의 브로드 캐스트)

2차원

import numpy as np

#Numpy 원소의 값을 조건에 따라 바꿀 때는 다음과 같이 합니다.
#반복문을 이용할 때보다 매우 빠르게 동작합니다.
#대체로 이미지 처리(Image Processing)에서 자주 활용됩니다.
array1 = np.arange(16).reshape(4, 4)
print(array1)

array2 = array1 < 10
print(array2)

array1[array2] = 100
print(array1)
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11] 
[12 13 14 15]]
 [[ True True True True]
 [ True True True True]
 [ True True False False]
 [False False False False]] 
[[100 100 100 100] 
[100 100 100 100]
[100 100 10 11]
[ 12 13 14 15]]

다차원

np.newaxis
:차원을 늘려줌 2

#make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
#make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis]
In [12]: col_vec.shape
Out[12]: (4, 1)

다양한 집계 함수

import numpy as np

array = np.arange(16).reshape(4, 4)

print("최대값:", np.max(array))
print("최소값:", np.min(array))
print("합계:", np.sum(array))
print("평균값:", np.mean(array))

행 or 열단위 더하기

import numpy as np

array = np.arange(16).reshape(4, 4)

print(array)
print("합계:", np.sum(array, axis=0))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
합계: [24 28 32 36] (행)

저장, 불러오기

단일 객체

import numpy as np

array = np.arange(0, 10)
np.save('saved.npy'(저장 이름), array)

result = np.load('saved.npy')
print(result)
[0 1 2 3 4 5 6 7 8 9]

여러 개의 객체

import numpy as np

array1 = np.arange(0, 10)
array2 = np.arange(10, 20)
np.savez('saved.npz', array1=array1, array2=array2)

data = np.load('saved.npz')
result1 = data['array1']
result2 = data['array2']
print(result1)
print(result2)

[0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]

특정한 기준에 따라서 정렬

import numpy as np

Numpy 원소 오름차순 정렬

array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array)

Numpy 원소 내림차순 정렬

array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array[::-1])

각 열을 기준으로 정렬

array = np.array([[5, 9, 10, 3, 1], [8, 3, 4, 2,5]])
array.sort(axis=0)
print(array)
[ 1 3 5 9 10]
 [10 9 5 3 1] 
[[ 5 3 4 2 1]
 [ 8 9 10 3 5]]

자주 사용되는 함수

import numpy as np

균일한 간격으로 데이터 생성

array = np.linspace(0, 10, 5)
print(array)

난수의 재연(실행마다 결과 동일)

np.random.seed(7)
print(np.random.randint(0, 10, (2, 3)))

Numpy 배열 객체 복사

copy로 복사하면 서로 다른 id를 가지므로 다른 객체를 바꿔도 원래객체는 그대로임.

array1 = np.arange(0, 10)
array2 = array1.copy()
print(array2)
import numpy as np
import cv2
 
array1 = np.arange(0, 10)
array2 = array1.copy()
print(array1)

array2[0] = 99

print(array1)
print(array2)

(결과)

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[99  1  2  3  4  5  6  7  8  9]

중복된 원소 제거

array = np.array([1, 1, 2, 3, 3, 3, 1])
print(np.unique(array))
[ 0. 2.5 5. 7.5 10. ] 
[[4 9 6]
 [3 3 7]] 
[0 1 2 3 4 5 6 7 8 9] 
[1 2 3]


PythonBasic Share Tweet +1