조금씩 꾸준히 완성을 향해

[Numpy] 배열의 구조와 배열의 생성 본문

Python/Numpy & Pandas

[Numpy] 배열의 구조와 배열의 생성

all_sound 2022. 9. 21. 14:12

Numpy


Python의 고성능 과학 계산용 라이브러리

백터나 행렬같은 선형대수의 표현법을 코드로 처리

다차원 리스트나 크기가 큰 데이터 처리에 유리

 

 

    특징

  • 속도가 빠르고 메모리 사용이 효율적
  • 반복문을 사용하지 않음 (연산할 때 병렬로 처리, 함수를 한 번에 많은 요소에 적용)
  • 다양한 선형대수 관련 함수 제공
  • C, C++, 포트란 등 다른 언어와 통합 사용 가능

 

Array and Tensor (배열과 텐서)


ndarray (넘파이 배열) : 넘파이에서 텐서 데이터를 다루는 객체

tensor (텐서) : 선행대수의 데이터 배열 (rank에 따라 이름이 다름)

 

RANK NAME EXAMPLE
0 스칼라(scalar) 7
1 백터(vactor) [10, 10]
2 행렬(matrix) [[10, 10], [15, 15]]
3 3차원 텐서(3-order tensor) [[[1, 5, 9], [2, 6, 20]], [[3, 7, 11], [4, 8, 12]]]
n n차원 텐서(4-order tensor)  

 

 

Python LIST  vs  Numpy ARRAY


  • 넘파이의 배열은 텐서 구조를 준수한다 -> 배열의 모든 구성 요소에 값이 존재해야 한다.
  • 넘파이의 배열은 동적 타이핑을 지원하지 않는다 -> 리스트 안에서 하나의 데이터 타입만 사용
  • 넘파이의 배열은 데이터를 메모리에 연속적으로 나열한다 -> 각 값의 메모리 크기가 동일, 검색이나 연산 속도가 파이썬의 리스트에 비해 훨씬 빠름)

 

배열의 생성


▶ np.array (array, datatype)

 

import numpy as np  # numpy 라이브러리 import

# 리스트를 생성할 때 데이터타입 지정 (모든 요소를 하나의 타입으로 통일)
test_array = np.array([1, 4, 5, 8], float)
print(test_array)
# outpur: [1. 4. 5. 8.]
# 서로 다른 타입의 데이터를 넣고 타입지정을 하지 않으면 -> string으로 변환
test = np.array([1, '2', True, 4.3])
print(test)
['1' '2' 'True' '4.3']
# 텐서구조 준수 -> 배열의 모든 구성 요소에 값이 존재해야 함

test_list = [[1,4,5,8],[1,4,5]]  # 요소 개수 불일치
np.array(test_list, float)  # ValueError!!

test_list = [[1,4,5,8],[1,4,5,7]] # 요소 개수 일치
np.array(test_list, float)  
# output: array([[1., 4., 5., 8.],  
#               [1., 4., 5., 7.]])
# float 지정시, 숫자가 들어있는 문자열 -> float 자동 형변환 실시

test_array = np.array([1, 4, 5, "8"], float)
print(test_array)
# output: [1. 4. 5. 8.]

print(type(test_array[3])) # '8'로 넣은 요소에 대한 데이터타입 확인
# output: <class 'numpy.float64'>

print(test_array.dtype) # 배열 전체의 데이터 타입 반환
# output: float64