본문 바로가기
투자를 위한 코딩/Python

Numpy(1) - 생성,자료형 변환,슬라이싱,차원

by swcha02 2020. 9. 10.
import numpy as np

일단 이렇게 Numpy를 불러와주고 시작

 

### Numpy 데이터 생성


## 1
array = np.array([[1,2,3],[4,5,6]])


## 2

array = np.array([
    [1,2,3],
    [4,5,6]
])

### 둘의 결과는 사실상 동일

개인적으로는 Numpy를 사용해서 행렬이나 다른 데이터들을 조작할 떄 아래 형식을 가능한한 쓰고 있는 편이다. Numpy는, 앞에서도 언급했듯이 Numerical(Numeric) Python의 준말로, 파이썬에 수치적인 연산을 하기 위해 만들어진 패키지이다. 여기서 말하는 수치적인 연산이라 함은, 선형대수도 당연히 포함된다.(아마도 주로 선형대수인 것 같다). 그렇다면 Numpy 연산 중에서 행렬과 벡터의 연산은 필수불가결이라고 할 수 있으며, 기본적인 행렬 혹은 벡터를 생성할때 위의 방법을 사용한다. (물론 다른 특이한 행렬들은 저렇게 말고 바로 생성하는 방법이 존재한다) 

위의 예시를 보면 , Numpy의 데이터 생성방법은 뭔가 Python list 자료형과 매우 비슷하다. 하지만 list 자료형과 동일하다고 볼 수는 없는데 그 이유는 list 자료형은 list 안에 각기 자료형이 다른 원소를 취할 순 있지만(EX: [1,'string',True] ) Numpy는 그게 안된다. 즉, Numpy 자료형은, 원소의 자료형이 다 똑같아야한다. int면 int, str이면 str,float면 float등 이런 형식이다. 그런데 만약 강제로 다른 형식의 자료형을 중간에 넣으면 어떻게 될까?

 

## int형 중간에 float형 넣어보기 
test = np.array([1,2,3.5])
test

'''
결과 : array([1. , 2. , 3.5])
'''

출력된 결과를 보면, 원래 int형이었던 나머지 원소 1,2도 3.5처럼 float형으로 변한 것을 알 수 있다. 이처럼 Numpy 데이터 원소들이 서로 다른 자료형이라면, 원소들 중에서 데이터가 가장 큰 자료형을 기준으로 자료형을 통일해서 출력한다. 만약에 float 자료형을 int 자료형으로 변경하고 싶다면 거기에 또 알맞은 방법이 있다. 

# 위의 코드에 이어서
test = test.astype('int32')
test

'''
결과 : array([1, 2, 3])
'''

test 객체에다가 astype 메서드를 써주고 원하는 자료형을 괄호안의 파라미터로 써주면 데이터 타입 변경이 가능하다. 물론 원소 한개만 변경하는 것은 불가능하다.  그러면 Numpy 안의 데이터는 어떻게 지정할 수 있을까? 이 점에 있어서는 Python list 자료형과 매우 비슷하다. 

## 3 X 3 행렬 생성
test = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])

### 인덱싱
## (1) 첫번째 행,첫번째 열의 원소 (1,1) : 1
test[0][0] # test[0,0]도 같은 효과

## (2) 두번째 행,두번째 열의 원소 (2,2) : 5
test[1][1] # test[1,1]도 같은 효과

## (3) 세번째 행
test[2] # test[-1,:]도 같은 효과

## (4) 첫번째 열
test[:,:1]

list 자료형의 슬라이싱 혹은 인덱싱처럼 Numpy 데이터도 마찬가지로 동일한 방법을 쓴다.하지만 주의할 점은, Numpy 데이터는 차원의 갯수에 따라 슬라이싱할 공간도 달라진다. 여기서는 행렬을 예시로 들었는데 , 행렬은 2차원이므로 대괄호([])를 두 개 썻다. 물론 괄호 수를 늘리는 것 말고 괄호안의 공간을 늘려서 행과 열을 표시해도 된다. 그럴 경우 각 행과 열은 1차원 벡터라고 생각하고 슬라이싱하면 Python list의 슬라이싱과 큰 차이가 없다는 것을 알게된다.  슬라이싱 이전에, 행렬 혹은 Numpy 데이터 자체의 차원과 모양을 대략적으로 알고 싶으면 이 또한 방법이 있다. 

 

test = np.array([
    [1, 2, 3],
    [4, 5, 6],
])
test.ndim, test.shape


'''
결과값: 2 , (2, 3)
'''

ndim과 shape는 각각 해당 객체가 몇 차원인지와 객체의 모양을 알려준다.  이 두개의 속성(atrribute)은 행렬뿐만 아니라 고차원의 데이터에도 적용가능하며, 특히 shape 속성은 후에 서술할 reshape와 함께 매우 중요하게 쓰인다. 

 

 

'투자를 위한 코딩 > Python' 카테고리의 다른 글

Numpy(2) - 기본적인 함수들  (0) 2020.12.15
Numpy 개요  (0) 2020.09.07

댓글