Numpy 기본 문법

장채민·2024년 12월 26일

arr.shape 배열의 크기

-> 튜플로 반환

//1차원 배열
arr=np.array([1,2,3])
print(arr.shape)
> (3,)

//2차원 배열
arr=np.array([1,2,3],[4,5,6])
print(arr.shape)
> (2,3)

arr.dtype 데이터 타입

arr=np.array([1,2,3],[1,2,3])
print(arr.dtype)
> dtype('int')

arr.ndim 차원의 수(number of dimension)

arr=np.array([1,2,3],[1,2,3])
print(arr.ndim)
> 2

arr.size 데이터의 총 개수(행*열)

arr=np.array([1,2,3],[1,2,3])
print(arr.size)
> 6

arr.nbytes 메모리 크기 반환

-> 8비트 = 1바이트

  • int8 = 8비트 = 1바이트
    int32 = 32비트 = 4바이트
    int64 = 64비트 = 8바이트
arr=np.array([[1,2,3],[1,2,3]])
//int는 int64로 자동 지정
print(arr.ndim)    // 8바이트 * 6개
> 48 

arr.reshape 배열의 크기 변경

arr=np.array([1],[2],[3],[4],[5],[6],[7],[8],[9])
arr.reshape(8,)     //1차원 배열 array([1,2,3,4,5,6,7,8])로 크기 변경  (콤마 안찍어도 괜찮음)
arr.reshape(1,-1)     //2차원 배열 array([[1,2,3,4,5,6,7,8]])로 크기 변경
arr.reshape(2,4)      //2X4 행렬로 변형
arr.reshape(2,2,2)     //2X2X2 행렬로 변경
arr.reshape(-1,2)     //4X2 행렬로 변형
//-1: size를 기반으로 row 개수 선정


np.array

-> np.array(리스트 또는 튜플, dtype=데이터 타입(데이터타입만 써도됨))
-> ndarray 배열 생성(numpy dimension array)

np.array([[1,2,3,4],[5,6,7,8]], dtype=int)

> array[[1,2,3,4],
       [5,6,7,8]]

np.arange

-> np.arrange( 시작점(생략시 0), 끝점(미포함), step size(생략시 1) )
-> 실수 단위 표현 가능
-> numpy array 자료형 반환 (넘파이 연산 가능)

np.arange(10)
> array([0,1,2,3,4,5,6,7,8,9])

np.arange(1,15,2)
> array([1,3,5,7,9,11,13])
  • range
    -> 파이썬 내장 함수
    -> range(start,stop,step)

Numpy 배열 생성


#2번(0행렬)
b=np.zeros((2,2))
//Numpy 배열의 기본 데이터 타입은 부동소수점(floating point) 숫자
> array([0.,0.],[0.,0.])

b=np.zeros((2,2),dtype=int)
//만약 정수로 표현하고 싶다면 다음과 같이 데이터 타입을 설정해줘야 함.

#3번(1행렬)
c=np.ones((3,2))
> array([1.,1.],[1.,1.],[1.,1.])

#4번(지정값 행렬)
d=np.full((2,3),10)
//10이라는 정수형 타입으로 채우겠다고 이미 명시하였으므로 데이터 타입은 int
> array[[10,10,10],[10,10,10]]

#5번(단위행렬E)
e=np.eye(3)
> array[[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]]

np.where: 조건 만족 인덱스 반환

1차원 array

a=np.arrange(5,15)
# a=[5,6,7,8,9,10,11,12,13,14]
np.where(a>10)
> array[6,7,8,9]

2차원 array

a=np.arange(5,15)
# a=[[15, 8, 12], [11, 7, 3]]
np.where(a>10)
//(0,0): 15
//(0,2): 12
//(1,0): 11
> array([0,0,1]), array([0,2,0])

조건에 따른 값 반환

-> np.where( 조건 , 참일 경우 반환값 , 거짓일 경우 반환값 )

a=np.array([15,8,12],[11,7,3])
np.where(a>10,a,10)
//a가 10보다 크면 그대로, 그렇지 않으면 10 반환
> array([[15,10,12],[11,10,10]])

np.unique(arr)

-> 배열에서 중복된 값들 제거한 배열 반환해주는 함수
-> 오름차순으로 정렬

arr=np.array([0,1,1,0,2,2,2])
unique_values=np.unique(arr)
print(unique_values)
> [0,1,2]

np.linspace(arr)

-> np.linspace( 시작값 , 끝값 , 생성할값의개수 , ... )

arr=np.linspace(0,10,6)
print(arr)
> [0,2,4,6,8,10]

np.meshgrid(arr)

-> np.meshgrid( x값 범위 배열, y값 범위 배열 )
-> 직사각형의 격자 그리트 만드는 함수

import numpy as np
import matplotlib.pyplot as plt

a=np.linspace(0,10,5)
b=np.linspace(0,10,5)

x,y=np.meshgrid(a,b)
plt.scatter(x,y)
plt.show()

np.random

  • np.random.randint: 균일 분포의 정수 난수 1개 생성

  • np.random.rand: 0부터 1 사이의 균일 분포에서 난수 matrix array 생성

  • np.random.randn: 가우시안 표준 정규 분포에서 난수 matrix array 생성

  • np.random.RandomState: 난수생성기 만들기

arr.ravel() / arr.flatten()

다차원 배열을 1차원 배열로 변환
-> arr.ravel(): 1차원 배열을 반환
-> arr.flatten(): 1차원 배열의 복사본 반환
-> np.reshape(): 데이터 변경 없이 형상만 변경하여 반환

  • flatten 함수
    -사본 형식으로 원본을 복사함
    -즉, 원본을 변경해도 사본에는 영향을 받지 않으며,
    사본을 변경해도 원본에 변화 없음

  • ravel 함수, reshape 함수
    -변화가 있으면 원본에도 영향을 미침.

np.dot()

-> 내적/행렬곱 계산하는 함수 (2개의 input만 받음)
-> 1차원 배열끼리의 곱셈은 내적으로 연산 (np.inner도 행렬의 내적 계산하는 함수)
np.dot([a,b],[c,d]) = ac+bd

0개의 댓글