본문 바로가기
Python/데이터 분석

[Numpy] Numpy 배열의 속성 및 함수

by snow_white 2022. 4. 2.

ndim : ndarray의 차원 나타냄 , 1⇒ 1차원

shape : 각 차원의 ndarray 크기를 튜플 형태로 나타냄, 가로(행) x개, 세로(열) y개, 3행 4열 ⇒ (3, 4)

 size : ndarray에 있는 요소의 총 수

dtype : ndarray의 데이터 유형, int8~int64, float16~float128

⭐ dtypes : column 별 데이터 타입 확인

T : ndarray의 전치된 결과 반환 (행열 바꾸기) ⇒ transfer됨

astype() : ndarray의 모든 요소들의 타입을 한 번에 형 변환

 reshape : (1, 8)짜리 배열이 reshape(4,4)짜리로 변환, 재대입 필수

array = np.array([[1, 2], [3, 4]])
print('array의  차원:', array.ndim) # 2
print('array의 각 차원별 크기:', array.shape) # (2, 2)
print('array의 요소의 총 개수:', array.size) # 4
print('array의 데이터 유형:', array.dtype) # int32

print('전치 후 ',array.T)
>> 
[[1 3]
 [2 3]]
import sys
arr = np.array([1,2,3,4])
arr # array([1, 2, 3, 4])
print(arr.dtype) # int32

arr_f = np.array([1,2,3,4], dtype=np.int64)
arr_f # array([1, 2, 3, 4], dtype=int64)

# 메모리에 올라갈 데이터의 크기가 다르다
print(sys.getsizeof(arr)) # 120
print(sys.getsizeof(arr_f)) # 136

arr1 = np.array([[1.0, 2, 3],
               [4, 5, 7]], dtype=np.int32)

arr1
>>array([[1, 2, 3],
       [4, 5, 7]])
arr1 = np.array([[1.0, 2, 3],
               [4, 5, 7]], dtype=np.int32)

arr1
'''
array([[1, 2, 3],   => 1.0이 int32로 형변환 됨
       [4, 5, 7]])
'''

type : 객체의 형을 묻는

dtype : array의 데이터 형을 묻는

np.array 만들 때 dtype=float 와 같이 데이터 타입을 지정하여 생성할 수 있다

dtype이 int32 와 int64는 메모리를 차지하는 크기가 다르다

 

  • astype() : ndarray의 모든 요소들의 타입을 한 번에 형 변환
# 함수 사용
print(type(arr1)) # <class 'numpy.ndarray'>    <->     dtype과 다름!!
print(arr1)
print(np.ndim(arr1)) # 2 => 이차원
print(np.shape(arr1)) # (2, 3) => 2행 3열

# 속성 사용
print(arr1.ndim)
print(arr1.shape)
print(arr1.size) # 6 => 요소 개수
print(arr1.dtype) # int32   <->   type() 함수와 다름!!!

# ndarray 안에 들어있는 모든 요소들의 타입을 한 번에 float32 타입으로 변환
arr1_1 = arr1.astype(np.float32)
print(arr1_1)
'''
[[1. 2. 3.]
 [4. 5. 7.]]
'''

# reshape()
arr_r = np.arange(32).reshape(4, 8) # 0~31개의 요소를 4행 8열로 만들기
print(arr_r)

 

astype()으로 형변환하여 새로운 array 생성하여도 원본은 유지됨

a = np.array([1, 2, 3]) 
print(a) # [1 2 3] 
print(a.dtype) # int64 

a_float = a.astype(np.float32) 
print(a_float) # [1. 2. 3.] 
print(a_float.dtype) # float32 

print(a) # [1 2 3] 
print(a.dtype) # int64
x = np.arange(1,5).reshape(2,2)
x
'''
array([[1, 2],
       [3, 4]])
'''

x.astype(np.int32)
np.int32(x)
x.astype('int')
'''
array([[1, 2],
       [3, 4]])
'''

x = x.astype(np.float)
print(x.dtype) # float64

 

 

 

Numpy Array의 형태를 바꾸기 위해서는 reshape 함수를 이용

reshape 할 때는 요소의 개수를 고려해서 합당하게 만들어야 함

shape이 (1,8)인 array는 (2,4)로 변경 가능, (3,3)으로는 변경 불가능

array = np.arange(8)
array, array.shape # (array([0, 1, 2, 3, 4, 5, 6, 7]), (8,))

array.reshape(1,8)
array = array.reshape(2, 4)
array
'''
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
'''

 

shape이 (1,9)인 array [1,2,3,4,5,6,7,8,9] 를 (3,3)으로 reshape() 가능

-1(와일드카드)은 딱 한 번만 사용할 수 있으며 자동으로 적절한 형태를 계산

(3,-1)도 가능 → 행을 fix! 3행을 만들고 열은 알아서 조정해라! 요소가 9개였으니 자동으로 열은 3 →(3,3)으로 됨

(-1, 3)도 가능 → 열은 3으로 fix! 행은 알아서 조정! (3,3)으로 나옴

(4,-1)은 불가능 → 행이 4일 때 열이 조정되지 않음, 요소의 개수가 9개이기 때문에 9의 약수로만 가능

array = np.arange(16)
array, array.shape
>>
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
 (16,))

array.reshape(1,8) # array([0, 1, 2, 3, 4, 5, 6, 7])

array.reshape(2, 4).shape # (2, 4)

array = array.reshape(-1,2)
array
'''
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
'''

 

✔️ 정리

  1. Numpy는 numeric python의 약자로 리스트와 형태는 같지만 ndarray 타입으로 바꾸면 연산이 가능하다
  2. 리스트는 연산이 불가능하다

'Python > 데이터 분석' 카테고리의 다른 글

[Numpy] Numpy 배열의 정렬  (0) 2022.04.02
[Numpy] Numpy 배열의 Indexing & Slicing  (0) 2022.04.02
[Numpy] Numpy 배열의 연산  (0) 2022.04.02
[Numpy] Numpy  (0) 2022.04.02
[Python] Numpy 심화  (0) 2022.03.17

댓글