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 |
댓글