Python

numpy 개요(ndarray와 배열의 타입)

  • -
728x90

numpy에 대해 알아보자

numpy의 기본 단위는 ndarray 객체이다. ndarray란!?

ndarray: n차원(Dimension) 배열(Array)객체 라는 뜻으로  numpy의  기본 단위다.

차원은 n차원으로 이루어져있는데 n차원은 n-1차원을 기본 단위로 갖는 특성을 가지고 있다.

n차원 배열의 형태

다음은 ndarray의 기본적인 특징이다.

  • Ndarray내의 데이터 값은 숫자, 문자, 불 값 등이 모두 가능하다.
  • 숫자형의 경우 int형과 unisigned int형(8, 16, 32bit) 그리고 float형 도 가능하고 이보다 더 큰 숫자 값이나 정밀도를 위해 complex 타입도 제공한다.
  • Ndarray내의 데이터 값은 그 연산의 특성상 같은 데이터 타입만 가능하다. 즉, 한개의 ndarray 객체에 int와 float가 함께 있을 수 없다.
  • Ndarray내의 데이터 타입은 .dtype으로 확인 가능하다.
  • 타입을 변경하고자 하면 .astype()에 인자로 입력 float를 int로 변경하여 메모리 절약이 가능하다 방대한 데이터를 다룰때 꼭 필요하다.

Numpy ndarray 개요

코드

import numpy as np

array1 = np.array([1,2,3])              #np.array(리스트)는 해당 객체를 ndarray타입으로 만들어준다.
print('array1 type:',type(array1))
print('array1 array 형태:',array1.shape)

array2 = np.array([[1,2,3],
                  [2,3,4]])
print('array2 type:',type(array2))      # type(객체)로 타입 확인 가능
print('array2 array 형태:',array2.shape) #.shape로 형태 확인 가능

array3 = np.array([[1,2,3]])
print('array3 type:',type(array3))
print('array3 array 형태:',array3.shape)

출력결과

array1 type: <class 'numpy.ndarray'>
array1 array 형태: (3,)
array2 type: <class 'numpy.ndarray'>
array2 array 형태: (2, 3)
array3 type: <class 'numpy.ndarray'>
array3 array 형태: (1, 3)

위를 보면 array1과 array3의 차이를 아는게 중요하다. 

array1은 형태는 같지만 단일 리스트로 1차원이고

array3는 중첩리스트로 2차원이다. 

나중에 배열끼리 concat등을 이용해서 병합할때 차원 통일을 해주어야 하기 때문에 꼭 알아둬야 한다.

 

아래코드는 리스트 하나를 ndarray형태로 변환한 모습이다.

코드

list1 = [1,2,3]
print(type(list1))
array1 = np.array(list1)
print(type(array1))
print(array1, array1.dtype)

출력결과

<class 'list'>
<class 'numpy.ndarray'>
[1 2 3] int64

형태는 ndarray이고 1, 2, 3 이 요소로 들어간 것을 알 수 있으며 타입은 정수형이다.

 

아까 배열 안에는 다른 타입이 들어갈 수 없다고 했는데 막상 다른 타입을 넣어도 오류가 발생하지는 않는다.

다음을 보면 다른 타입이 들어가더라도 형변환이 되어 타입이 통일이 되서 들어간 것을 확인할 수 있다.

코드

list2 = [1, 2, 'test']
array2 = np.array(list2)
print(array2, array2.dtype)

list3 = [1, 2.0, 3]
array3 = np.array(list3)
print(array3, array3.dtype)

출력결과

['1' '2' 'test'] <U21 # 정수형이 문자형으로 통일
[1. 2. 3.] float64    # 정수형이 실수형으로 통일

ndarray 타입변환

위에서  float형 데이터를 int형으로 바꾸면 메모리절약을 크게할 수 있다고 했다. 이처럼 타입은 .astype으로 바꾸는 것이 가능하다.

코드

array_int = np.array([1, 2, 3])
array_float = array_int.astype('float64')
print(array_float, array_float.dtype)

array_int1= array_float.astype('int32')
print(array_int1, array_int1.dtype)

array_float1 = np.array([1.1, 2.1, 3.1])
array_int2= array_float1.astype('int32')
print(array_int2, array_int2.dtype)

출력결과

[1. 2. 3.] float64
[1 2 3] int32
[1 2 3] int32

위를 보면 astype에 의해 타입이 바뀐 것을 알 수 있다.

728x90

'Python' 카테고리의 다른 글

자료구조 #1 Array  (0) 2023.12.21
자료구조 #2 Queue  (0) 2023.12.21
Numpy 기본  (1) 2023.10.28
넘파이 ndarray의 axis축(axis≠행열)  (0) 2022.07.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.