AI

[Python/ ML] 넘파이(numpy)를 이용한 간단한 행렬 연산 (shape, ndim, reshape)

예민한고라니 2022. 1. 6. 15:16

 

1. 벡터& 행렬 선언 ( shape, ndim )


Numpy 라이브러리를 이용하여 1차원 배열인 벡터(Vector)와 2차원 배열인 행렬(Matrix)를 선언할 수 있다.

선언한 벡터와 행렬은 shape 메소드를 이용하여 형태를 확인할 수 있고 ,

ndim 메소드를 이용하여 차원을 확인할 수 있다.

import numpy as np
Vector_ex = np.array([1,2,3]) // 1, 의 벡터
Matrix_ex = np.array([[1,2,3],[4,5,6]])  // 2x3 행렬

print("A==",A,"B ==",B)
print("Vector_ex shape ==",Vector_ex.shape,"Matrix_ex shape ==",Matrix_ex.shape) 
print("Vector_ex dimension ==",A.ndim,"Matrix_ex dimension ==",B.ndim)
 

 

 

2. 넘파이를 이용한 행렬 형변환 (reshape)


reshape 메소드는 numpy 행렬의 형 변환을 돕는다,

 

아래는 벡터를 행렬로 바꾸는 코드다

import numpy as np

vec = np.array([1, 2, 3]) # 벡터의 형상을 띄었지만
print("vec.shape ==", vec.shape)
print(vec)

mat = vec.reshape(1,3) 
print("mat.shape ==", mat.shape)
print(mat) #reshape를 통해 1x3 형상의 행렬로 바뀌었음
 

결과는 아래와 같다

vec.shape == (3,)
[1 2 3]
mat.shape == (1, 3)
[[1 2 3]]
 

 

 

다음은 행렬을 다른 행렬로 바꾸는 코드다

 

import numpy as np

mat1  = np.array([[1, 2, 3],[4,5,6]]) # 2x3의 형상을 띄었지만
print("mat1.shape ==", mat1.shape)
print(mat1)

mat2 = mat1.reshape(3,2) 
print("mat2.shape ==", mat2.shape)
print(mat2) #reshape를 통해 3x2 형상의 행렬로 바뀌었음
 

결과는 다음과같다

mat1.shape == (2, 3)
[[1 2 3]
 [4 5 6]]
mat2.shape == (3, 2)
[[1 2]
 [3 4]
 [5 6]]
 

 

번외) reshape(-1, ...) 이 의미하는것은?

 

reshape에서 마이너스일 ,즉 reshape(-1, x ) 형시으로 사용될 때에는 x에 맞춰서 행을 결정하겠다는 것이다.

따라서 x는 전체 원소 갯수의 약수가 되어야 하며 이외의 숫자 사용시 error가 뜨게 된다.

 

A = np.array([[1,2,3,4],
              [10,20,30,40],
              [100,200,300,400]])
B = A.reshape(-1,3)  //3외의 7,9 등의 숫자가 나오면 에러가 뜬다
print('B.shape=', B.shape)
print(B)
 
B.shape= (4, 3)
[[  1   2   3]
 [  4  10  20]
 [ 30  40 100]
 [200 300 400]]
 

 

 

 


참고문헌: 머신러닝을 위한 파이썬 한 조각 / 박성호 저 / 2020년 02월