넘파이의 Array는 파이썬의 기본 내장 list와 비슷하게 사용된다.
다만 배열을 단지 요소들의 집합으로만 보는게 아니라 연산을 위한 행렬로서 사용하기 위해선 Array사용이 필요하다.
물론 리스트도 연산에 사용 될 수 있지만 array에 비해 명확한 단점이 존재한다.
1. Array에 비해 연산 속도가 느리다
(array는 데이터가 인덱스와 함께 저장되기 때문에 숫자를 바로바로 꺼내서 연산을 할 수 있지만 list는 단지 데이터를 들어온 순서대로 넣은 형태이기 때문에 연산을 위해선 for문 등을 이용해 하나씩 꺼내서 계산하고 다시 넣어야 한다)
2. list 끼리의 연산이 불가능하다
list A + list B 는 그냥 A 뒤에 B 이어붙이기가 된다.
계산을 위해 Array를 사용하다 보면 리스트의 일부를 가져와 계산을 한 뒤에 다시 그 자리에 넣는 작업을 할 때가 있다.
예를 들면 sine wave data를 불러와 계산에 이용하려고 한다.
AC 데이터에 절대값(abs 함수 사용)을 취해 DC 형태로 만들려고한다.
근데 이 데이터가 정현파가 아니라 부분부분 oscillation이 존재하는 형태의 신호여서 abs를 사용하면 oscillation 신호가 손상되기 때문에 음의 신호부분만 따로 잘라내서 -를 곱해야 했다.
-를 곱하는 연산이 들어가 있어 list 슬라이싱 기법으로만 구현하기에 복잡했는데
numpy의 delete와 insert 함수를 이용해서 쉽게 구현할 수 있었다.
import numpy as np
# Array A에서 [5,7,9]만 -를 곱해서 [1,3,-5,-7,-9, 10]의 array로 만들고자함
A = np.array([1,3,5,7,9,10])
# Array B에 [-5, -7, -9]를 저장
B = np.array(-A[2:5])
# Array C에 A에서 [5, 7, 9]를 빼낸 나머지를 저장하고자 함
C = np.delete(A, range(2,5))
# Array D에는 C에 B를 집어넣은 Array를 저장
D = np.insert(C, 2, B)
np.delete의 문법은 np.delete(지우기전 전체 array, 인덱스 정수(또는 정수형태의 array)) 이다.
range(2,5)로 인덱스상 2,3,4에 해당하는 원소[5,7,9]를 지우는 명령어이다.
np.insert의 문법은 np.insert(박히는 쪽의 어레이, 박히는 위치 인덱스, 박아넣을 어레이)
인덱스상 2부터 4까지 지웠으니까 2에 넣으면 지운 데이터부터 들어간다.
# 각 코드의 출력 결과
A : [1 3 5 7 9 10]
B : [-5 -7 -9]
C : [1 3 10]
D : [1 3 -5 -7 -9 10]
[머신러닝 커닝 페이퍼] 분류를 위한 결정트리모델의 모든 것 1편 (0) | 2022.12.01 |
---|---|
[머신러닝 커닝 페이퍼] 메서드 연결 y_pred = dt_clf(X_train, y_train).predict(X_test) (0) | 2022.12.01 |
[머신러닝 커닝 페이퍼] train_test_split : random_state는 대체뭐야? 왜 X는 대문자고 y는 소문자야? (0) | 2022.11.29 |
제조 분야에서의 인공지능을 어떻게 도입하고 활용하고 있을까? (0) | 2021.07.09 |
데이터는 비교하려고 있는거야 (3) | 2020.10.06 |